【python脚本系列】png序列帧转化为gif
大家好,我是Lampard猿奋~~
欢迎来到python脚本系列的博客,今天和大家分享一下使用python如何将序列帧转化为gif
(一)环境搭建
为什么会有那么奇怪的做法呢?其实是在最近我接到了一个在游戏项目中录屏并导出gif的需求。cocos是没有gif导出功能的(好像unity也没有?),其只支持png,jpg格式的导出。因此这个需求就被拆分为录制序列帧+把序列帧转化成gif,引擎录取序列帧我们可以通过计时器加截图来实现,下面主要说说如何把序列帧转换为gif。
python环境搭建我已经在上一篇文章那里提及,大家可以跳转过去配置一下:【gif录制png序列帧】
(二)脚本实现
(1)目录结构
我这边新建了一个文件夹,里面有一个制作gif动画的脚本gifMaker.py,有一个子目录gifFrame是用来存gif的序列帧(当然这个都是可以在脚本随便改的,但是如果直接拿我的脚本用的话就得根据这样的目录结构了)
(2)代码实现
首先是记录gif和gif帧的路径,我们可以通过os.path.realpath(__file__)来获得脚本的完整路径,我们并不需要脚本的名字,所以还需要通过os.path.split来把路径和脚本名分割开来
可以看到当分割之后就会返回一个列表,列表的第一项就是我们想要的gif路径了,然后帧的路径就可以GifPath + '\\gifFrame'获得(window平台下)
首先写一个方法,用os.listdir方法把gifFrame里面所有的文件给保存在列表中。然后还需要对里面的文件进行排序,不然的话会出现10.png排在2.png之前这种bug,打印一下排序前和排序后的效果
排序前:0,1,10。排序后:0,1,2
最后就是利用序列帧来生成gif了,同样使用到的是save方法,其中介绍一下几个参数:
- save_all:是否展示所有帧,false的话就只显示第一帧
append_images,除第一帧之外之后的帧
duration:每一帧的持续时间,单位是毫秒
loop:重复次数,loop==0时一直重复
如果想了解更多的话就应该去看文档啦~~【pillow库文档传送门】
(三)PyInstaller
这是一个小工具,使用的策划或者QA可能并没有我们python2的环境,让他们也搭建一个那是非常不现实的。所以我们需要把python脚本编译成exe可执行文件。而这个步骤就需要用到PyInstaller模块,我们可以从官网去下载,也可以通过pip去install
然后在该文件目录下打开cmd,然后输入以下语句就可以打包exe文件了
生成的exe存放在PyInstaller的子目录dist下,我们需要把这个exe文件复制到python的位置上,不然它拿gif路径的时候就会出错了
看看最后效果: