Python-写个gif图片生成器(斗图小神器)

效果图

工具与技术

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 公众号同款,欢迎关注!

猜你喜欢

转载自blog.csdn.net/qq_25702235/article/details/130100562