效果图
工具与技术
GUI图形技术: PySimpleGUI
https://pysimplegui.readthedocs.io/en/latest/ 官方网址
-
PySimpleGUI库是是2018年发布的个人开源维护项目,是基于Tkinter、Remi、wxpython、PyQt这些模块的,其中Remi模块是将应用程序的界面用HTML的形式来展现,所以这个包有个亮点就是你可以输入相应的代码将其转变网页形式展示,而其余包则都是用来做图形界面的
-
优点
-
代码量少,门槛低
-
不需要使用类来创建用户界面
-
极为适合初学者,它里面包含了绝大多数原本需要用户编写的代码
-
-
安装
-
pip install PySimpleGUI
-
图片处理技术:PIL库的类Image
-
Python图像库PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.PIL历史悠久,原来是只支持python2.x的版本的,后来出现了移植到python3的库pillow,pillow号称是
friendly fork for PIL
,其功能和PIL差不多,但是支持python3 -
Image类是PIL中的核心类,你有很多种方式来对它进行初始化,比如从文件中加载一张图像,处理其他形式的图像,或者是从头创造一张图像等。Image模块操作的基本方法都包含于此模块内。如open、save、conver、show…等方法
-
安装
-
pip install Pillow
-
程序代码
创建一个 gif_util.py 工具类,用来生成gif图片
import os
from PIL import Image
def generate_gif(file_path, loop=0, duration=500):
try:
# 图片列表
file_list = os.listdir(file_path)
except Exception as e:
print(e)
return False
# 打开一张图片
im = Image.open(os.path.join(file_path, file_list[0]))
""":type:Image"""
img_list = []
for img in file_list[1:]:
# 判断图片后缀是 jpg、png、jfif 三种图片才做处理
if img.endswith("jpg") or img.endswith("png") or img.endswith("jfif"):
img_url = os.path.join(file_path, img)
print(img_url)
img_list.append(Image.open(img_url))
result_img = os.path.join(file_path, "result.gif")
# 保存为一张gif图片
# save_all=True 设置此项,会保存所有图片对象,否则只保存一张
# append_images=img_list img_list为存放对象们的列表
# duration GIF动图的间隔时间
# loop 循环播放的次数
im.save(os.path.join(file_path, "result.gif"), save_all=True, append_images=img_list, loop=loop, duration=duration)
return result_img
创建一个 gui_util.py 工具类,用来生成gui图形化界面
import PySimpleGUI as sg
def create_layout():
# 设置主题
sg.change_look_and_feel("GreenMono")
# 设置页面内容, 设置文本内容
t1 = sg.Text("请输入图片文件夹地址:")
# 输入框
img_path = sg.InputText()
file_browse = sg.FolderBrowse(button_color=sg.GREENS[0])
remark = sg.Text("注:如:D:\\imgs,生成的git图片在传入的图片文件夹中,且名称为 result.gif", text_color="#FF0000")
t2 = sg.Text("请输入图片循环播放次数:")
loop_count = sg.InputText(size=10, default_text=0)
t3 = sg.Text("(0 表示无限循环)", font="Any 8", text_color="#FF0000")
t4 = sg.Text("请输入图片播放间隔时长:")
duration = sg.InputText(size=10, default_text=100)
t5 = sg.Text("(单位是毫秒)", font="Any 8", text_color="#FF0000")
# 设置操作按钮
btn1 = sg.Button("开始生成git图", button_color=(sg.YELLOWS[0], sg.BLUES[0]))
btn2 = sg.Button("关闭", button_color=(sg.YELLOWS[0], sg.GREENS[1]))
# 设置输出文本框
show_result = sg.Output(size=(80, 20))
# 界面布局
layout = [[t1, img_path, file_browse], [remark], [t2, loop_count, t3], [t4, duration, t5], [btn1, btn2],
[show_result]]
return layout
程序入口主方法
import PySimpleGUI as sg
import gif_util
import gui_util
# 校验参数
def check_code(dict_data):
if not dict_data or len(dict_data) == 0:
return False
file_path = dict_data[0]
loop = dict_data[1]
duration = dict_data[2]
if not file_path:
return False
if loop and not str(loop).isdigit():
print("您输入的的循环次数是:%s,不是数值,请重新输入正确的数值!!!" % loop)
return False
if duration and not str(duration).isdigit():
print("您输入的播放间隔时长是:%s,不是数值,请重新输入正确的数值!!!" % duration)
return False
return True
if __name__ == '__main__':
layout = gui_util.create_layout()
window = sg.Window("欢迎使用git图片生成器!!!", layout)
while True:
# 读取界面输入的 值与相应的控件
event, value = window.read()
if event in [None, "关闭", "exit"]:
break
if event == "开始生成git图":
is_success = check_code(value)
if is_success:
file_path = value[0]
loop = value[1]
duration = value[2]
# 生成gif
result_img = gif_util.generate_gif(file_path, int(loop), int(duration))
print("gif图片生成完成!!!!!!!,图片保存地址:", result_img)
window.close()
程序代码可直接复制运行,运行后即可出现以上效果图 !!!
程序猿与投资生活实录已改名为 程序猿知秋,WX 公众号同款,欢迎关注!