jeremyjia / Games

Home Page Link:
https://jeremyjia.github.io/Games/
3 stars 8 forks source link

Python插件数据库 #1027

Open jeremyjia opened 6 months ago

jeremyjia commented 6 months ago

建立本issue,作为Python的插件库,以备在剧本中引用,类似之前的Javascript插件数据库 #901

jeremyjia commented 6 months ago

audio2wave plugin-2016673710 (显示给定音频文件的波形图)

import shlex import pipes import argparse from subprocess import check_call

parser = argparse.ArgumentParser(description='audio to waveform') parser.add_argument('--input', '-i', help='file_input', required=True) parser.add_argument('--out', '-o', help='file_out', default='output.png') args = parser.parse_args()

in_file_name = args.input out_file_name = args.out

command = 'ffmpeg -i ' + in_file_name + ' -filter_complex showwavespic=colors=yellow -frames:v 1 -y ' + out_file_name check_call(shlex.split(command))

jeremyjia commented 6 months ago

图片反色处理插件-2016697773

from PIL import Image, ImageChops import argparse

def invert_color(fname, outfilename): im = Image.open(fname) im_inverted = ImageChops.invert(im)

im_inverted.save(fname.replace('.', '_inverted.'))

im_inverted.save(outfilename)
return im_inverted

if name == 'main': parser = argparse.ArgumentParser(description='invert_color plugin') parser.add_argument('--input', '-i', help='file_input', required=True) parser.add_argument('--out', '-o', help='file_out', default='output.png') args = parser.parse_args() in_file_name = args.input out_file_name = args.out invert_color(in_file_name, out_file_name)

jeremyjia commented 6 months ago

手绘素描插件-2016710424 (将图片转换为素描的效果)

from PIL import Image, ImageChops import numpy as np import argparse

parser = argparse.ArgumentParser(description='audio to waveform') parser.add_argument('--input', '-i', help='file_input', required=True) parser.add_argument('--out', '-o', help='file_out', default='output.png') args = parser.parse_args() in_file_name = args.input out_file_name = args.out

原始图片路径 

original_image_path=in_file_name

 要生成的手绘图片路径,可自定义 

handdrawn_image_path=out_file_name

 加载原图,将图像转化为数组数据 

a=np.asarray(Image.open(original_image_path).convert('L')).astype('float') depth=10.

取图像灰度的梯度值

grad=np.gradient(a)

取横纵图像梯度值

grad_x,grad_y=grad grad_x=grad_xdepth/100. grad_y=grad_ydepth/100. A=np.sqrt(grad_x2+grad_y2+1.) uni_x=grad_x/A uni_y=grad_y/A uni_z=1./A

光源的俯视角度转化为弧度值

vec_el=np.pi/2.2

光源的方位角度转化为弧度值

vec_az=np.pi/4.

光源对x轴的影响

dx=np.cos(vec_el)np.cos(vec_az) dy=np.cos(vec_el)np.sin(vec_az) dz=np.sin(vec_el)

光源归一化,把梯度转化为灰度

b=255(dxuni_x+dyuni_y+dzuni_z)

避免数据越界,将生成的灰度值裁剪至0-255内

b=b.clip(0,255)

图像重构

im=Image.fromarray(b.astype('uint8')) print('finished image conversion!') im.save(handdrawn_image_path)

waynexw commented 5 months ago

Word Cloud 2041234638 (有BUG)

from flask import Flask, render_template, request from wordcloud import WordCloud import matplotlib.pyplot as plt from io import BytesIO import base64

parser = argparse.ArgumentParser(description='audio to waveform') parser.add_argument('--input', '-i', help='file_input', required=True) parser.add_argument('--out', '-o', help='file_out', default='output.png') args = parser.parse_args() in_file_name = args.input out_file_name = args.out

words = request.form['words'] weights = request.form['weights'] wordcloud = WordCloud(width=800, height=400).generate_from_frequencies(dict(zip(words.split(','), map(int, weights.split(','))))) plt.figure(figsize=(8, 4)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.tight_layout(pad=0) buffer = BytesIO() plt.savefig(buffer, format='png') buffer.seek(0) img_str = base64.b64encode(buffer.read()).decode('utf-8')

plt.close()

return f''

jeremyjia commented 5 months ago

Word_Cloud_Plug-In_2052020773 (Jeremy debug)

from flask import Flask, render_template, request from wordcloud import WordCloud import matplotlib.pyplot as plt from io import BytesIO import base64 import argparse

parser = argparse.ArgumentParser(description='audio to waveform') parser.add_argument('--input', '-i', help='file_input', required=True) parser.add_argument('--out', '-o', help='file_out', default='output.png') parser.add_argument('--weights', '-w', help='weight', default='1,2,3,4') args = parser.parse_args() in_file_name = args.input out_file_name = args.out in_weight = args.weights

words = in_file_name[7:] # "string-hello,world,jiapeng" 剧本中的参数传递方式 weights = in_weight #"1,2,3" wordcloud = WordCloud(width=800, height=400).generate_from_frequencies(dict(zip(words.split(','), map(int, weights.split(','))))) plt.figure(figsize=(8, 4)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.tight_layout(pad=0) buffer = BytesIO() plt.savefig(buffer, format='png') buffer.seek(0) img_str = base64.b64encode(buffer.read()).decode('utf-8') plt.close() print(img_str)

Write BytesIO to file

with open(out_file_name, "wb") as f: f.write(buffer.getvalue())

return f''

waynexw commented 2 months ago

20240706:汇报二维码生成功能调研python QrCode(借鉴Chatgpt提供的代码)

首先安装库 pip install qrcode[pil] 实现代码如下: import argparse import qrcode

def create_qr_code(input_text, output_file): qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data(input_text) qr.make(fit=True)

img = qr.make_image(fill='black', back_color='white')
img.save(output_file)
print(f"QR code saved as {output_file}")

if name == "main": parser = argparse.ArgumentParser(description="Generate a QR code from input text") parser.add_argument('--input', '-i', help='Input text for QR code', required=True) parser.add_argument('--output', '-o', help='Output file name for the QR code image', required=True)

args = parser.parse_args()

create_qr_code(args.input, args.output)

在命令行运行脚本 python generate_qr.py --input "www.google.com" --output "google_qr.jpg" 这个.py 生成了 "www.google.com" 的二维码并存储图片在相同的文件夹下,名字叫google_qr.jpg 如下 image 实验了如下命令 python generate_qr.py --input "今天是个好日子" --output "hrz.jpg" 生成了相应的QRcode如下 image 实验了如下命令 python generate_qr.py --input "搜狐,是一家互联网中文门户网站。1995年,搜狐创始人张朝阳利用风险投资创建了爱特信信息技术有限公司,1998年正式推出搜狐网。2000年,搜狐在美国纳斯达克证券市场上市。 搜狐开发的产品有搜狗拼音输入法、搜狗五笔输入法、搜狗音乐盒、搜狗浏览器、搜狐视频、独立的搜索引擎搜狗和网游门户畅游。" --output "shouhu.jpg"生成了相应的QRcode如下 image

jeremyjia commented 2 months ago

巴黎奥运会奖牌榜数据抓取插件-2254462605

import requests import argparse from bs4 import BeautifulSoup

parser = argparse.ArgumentParser(description='get medal list for 2024') parser.add_argument('--input', '-i', help='file_input', required=True) parser.add_argument('--out', '-o', help='file_out', default='out_medal_list.txt') args = parser.parse_args() in_source_url = args.input out_file_name = args.out

准备爬取的网页的URL,这里hardcode了,通常从输入参数获取

url = 'https://tiyu.baidu.com/al/major/home?page=home&match=2024年巴黎奥运会&tab=奖牌榜'

使用requests库发送GET请求

response = requests.get(url)

检查请求是否成功

if response.status_code == 200:

使用BeautifulSoup解析HTML

print(response.text)
soup = BeautifulSoup(response.text, 'html.parser')

# 假设我们要找的<div>元素有一个特定的class="target-class"
# 使用find_all()查找所有匹配的<div>元素,或者find()找到第一个匹配的<div>元素
div_target = soup.find('div', class_='c-infinite-scroll')

# 遍历找到的所有<div>元素 
divs = div_target.find_all('div',resursive=False)

index = 0
hFile = open(out_file_name, "w")

for div in divs:
    # 提取<div>内的文本内容
    # text = div.get_text(strip=True)
    s = div.text
    if len(s) != 0:
        line = index % 7
        if line in (0,1,3,4,5,6):
            print(s)
            hFile.write(s)
            nlen = len(s)
            for i in range (10-nlen):
                hFile.write(' ')                   
        index = index + 1
        if index % 7 == 0:
            hFile.write("\n")
    # print(s)
hFile.close()

else: print('请求失败,状态码:', response.status_code)

jeremyjia commented 2 months ago

调试王旭的二维码插件 2266357654

import argparse import qrcode import pyqrcode

def create_qr_code(input_text, output_file): print("call create_qr_code:"+input_text) qr = qrcode.QRCode(version=1,error_correction=qrcode.constants.ERROR_CORRECT_L,box_size=10,border=4,) qr.add_data(input_text) qr.make(fit=True)

img = qr.make_image(fill='black', back_color='white')
img.save(output_file)
print(f"QR code is saved as {output_file}")

def is_txt_file(filename): return filename.lower().endswith('.txt')

if name == "main":

parser = argparse.ArgumentParser(description="Generate a QR code from input text") parser.add_argument('--input', '-i', help='Input text for QR code', required=True) parser.add_argument('--output', '-o', help='Output file name for the QR code image', required=True) args = parser.parse_args()

inputText = args.input

if is_txt_file(args.input): with open (args.input) as f: inputText = f.read()

create_qr_code(inputText, args.output)

jeremyjia commented 1 week ago

插件测试 2365201911

print('python plug in test!')