基于Python实现拆分和合并GIF动态图
“表情包”是当前社交软件上不可或缺的交流方式,难以用文字表达的意思,发一个“表情包”,对方就能心领神会。下面是小派制作的一个表情包,准确地讲,是在已有表情包的基础上,二次加工而成的。
下面以最简单的代码形式(10行左右),介绍上述“表情包”的制作过程。第一,将GIF动态图拆分成图形帧。下图是网络上找到的一个GIF格式动态图。
利用Python将上述GIF格式动态图拆分图形帧,只需要输入以下代码。其中第1-2行是导入os库、从PIL库中导入Image函数功能。第3行是Image.open打开位于D盘路径下名为“first.gif”的动态图。第4行是建立名为“图形拆分”的文件夹,用于保存拆分后的图形帧。第5-12是利用try-except异常处理和while循环查找、保存图形帧到“图形拆分”文件夹中。第12行是打印共计拆分出多少图形帧。这个Python拆分GIF动态图的代码也就13行,相对其他方法是非常简单的。
import os from PIL import Image im = Image.open('D:\\Python\\gif\\first.gif') os.mkdir('图形拆分') try: i = 0 while True: im.seek(i) im.save('图形拆分/'+str(i)+'.png') i = i +1 except: pass print('共拆解图像帧数'+str(i))
运行上述代码,便将名为“first.gif”的动态图拆分成如下36帧图形。
第二,对拆分后的图形进行二次加工。比如打上自己喜欢的“台词”,这里把“出来浪啦”4个字打到上述拆分后的图形上,可以使用Photoshop等图形处理工具。如果使用Photoshop的话,因为拆分后的图形为png格式,直接打开会显示“索引”状态,此时可以通过“图像”-->“模式”-->“RGB颜色”将png变成图层,然后通过“移动”-->“顶部对齐/右边对齐”将多帧图形图层叠加对齐,然后再打上“台词”并逐个保存成png,如下图。当然不使用Photoshop,使用其他软件添加文字也行。这里将二次加工后的图形保存在“图形合并”文件夹中,方便第三步操作。
第三,Python将第二步中的图形帧合并成GIF动态图。输入如下代码即可:第1行是导入imageio,os模块,第2行建立一个名为images的空文件,用于保存多帧图形。第3行os.listdir()列表化返回“图形合并”文件夹中所有图形名。第4-5行for-in循环读取列表化的图形名。第6行imageio.mimsave()生成GIF格式动态图,duration=0.1表示每帧图形间隔0.1秒。这个Python合并GIF动态图的代码更加简单,才6行。
import imageio, os images = [] numberlist = os.listdir('图形合并') for i in range(len(numberlist)): images.append(imageio.imread('图形合并/'+numberlist[i])) imageio.mimsave('newfirst.gif',images,'GIF',duration=
保存和运行上述代码,便得到了Python制作的表情包“出来浪啦”。
当然现在有很多制作“表情包”的软件,不需要这么复杂。但这里主要是感受Python拆分GIF动态图成多个图形帧,以及合并多个图形帧成GIF动态图的过程。
以上就是本文的全部内容,希望对大家的学习有所帮助
您可能感兴趣的文章:
- 基于python OpenCV实现动态人脸检测
- 基于Python,Selenium和PhantomJS实现动态页面爬取
- C#实现拆分、合并GIF图片
- C#实现合并多个图像文件为一个动态GIF
- 基于Python实现matplotlib中动态更新图片(交互式绘图)
- Python爬虫实现获取动态gif格式搞笑图片的方法示例
- C#实现合并多个图像文件为一个动态GIF(转)
- Acegi+hibernate 动态实现基于角色的权限管理
- Python实现txt文件内容快速合并功能
- Acegi+hibernate 动态实现基于角色的权限管理
- 基于AJAX的动态树型结构的设计与实现
- 基于python的汉字转GBK码实现代码
- 在ubuntu中cosmos动态壁纸的python实现脚本
- 使用函数递归实现基于php和MySQL的动态树型菜单
- 【转】G 优化(SEO)基于动态页面的静态页面实现
- 求助:JSP或HTML静态页面实现对Tabel表格行和列的合并和拆分
- 在Windows系统中,如何python脚本实现分割合并大二进制文件,方便上传
- 基于python的汉字转GBK码实现代码
- Photoshop合并多张jpg为一张动态GIF
- Java之简单的图片动态显示(实现类似GIF动画效果)