今天在写文章的时候,需要合成一张Gif动图,结果之前一直使用的在线Gif工具居然要收费了,否则就得加水印,而且水印巨大无比,挡住主要内容了。于是就去github上找了一圈,结果没有找到理想的工具,基本上是使用文档不清晰,或者不支持自定义输入参数。不过也没白逛,扫了一眼代码,发现生成Gif的方法非常简单,所有就决定自己写了一个。
代码已上传到github: https://github.com/youlanhai/makegif
用法
python makegif.py 后面输入图片文件路径或文件夹,即可合成gif图片。本脚本支持python2和python3,需要先安装Pillow插件: pip install Pillow
。Windows用户还可以直接把图片路径或文件夹,拖拽到makegif.bat上面即可。
用法1:输入多个图片,自动在图片父目录下生成一张input.gif
python makegif.py input/1.png input/2.png input/3.png
用法2: 输入图片文件夹,工具会收集input文件夹下的所有图片,然后合成gif,输出为input.gif
python makegif.py input
完整参数:
usage: makegif.py [-h] [-d DURATION] [-o OUTPUT] [-f FILTERS] [-s SIZE]
[-l LOOP]
inputs [inputs ...]
创建gif图片
positional arguments:
inputs 输入文件路径,或文件夹。支持混合输入
optional arguments:
-h, --help show this help message and exit
-d DURATION, --duration DURATION
时间间隔。默认200ms
-o OUTPUT, --output OUTPUT
输出路径。如果未指定,则使用第一个图片所在的文件夹作为名称。如果文件夹为当前路径,则输出名称为out.git
-f FILTERS, --filters FILTERS
用于在文件夹中搜索指定的后缀文件。默认: png,jpg,bmp
-s SIZE, --size SIZE 输出图片大小。格式: 640x480; 或者640x,仅限定宽度为640,高度等比缩放;
或者x480,仅限定高度为480,宽度等比缩放
-l LOOP, --loop LOOP 循环次数。默认0,表示无限循环
实现说明
核心点就一个函数,调用PIL.Image的save方法,传入gif需要的参数即可:
images = [PIL.Image.open(path) for path in inputs]
images[0].save(output_path, save_all = True, duration = 200, loop = 0, append_images = images[1:])
参数 | 说明 |
---|---|
output_path | 输出路径,必须是.gif后缀 |
save_all | 保存所有后续的序列帧。必须为True |
duration | gif播放间隔,单位为毫秒 |
loop | 播放的循环次数。0表示无限循环;不传表示不循环 |
append_images | 后续的序列帧 |
脚本剩余功能主要是参数处理,和路径处理。