基于Python实现拆分和合并GIF动态图


Posted in Python onOctober 22, 2019

“表情包”是当前社交软件上不可或缺的交流方式,难以用文字表达的意思,发一个“表情包”,对方就能心领神会。下面是小派制作的一个表情包,准确地讲,是在已有表情包的基础上,二次加工而成的。

下面以最简单的代码形式(10行左右),介绍上述“表情包”的制作过程。第一,将GIF动态图拆分成图形帧。下图是网络上找到的一个GIF格式动态图。

基于Python实现拆分和合并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帧图形。

基于Python实现拆分和合并GIF动态图

第二,对拆分后的图形进行二次加工。比如打上自己喜欢的“台词”,这里把“出来浪啦”4个字打到上述拆分后的图形上,可以使用Photoshop等图形处理工具。如果使用Photoshop的话,因为拆分后的图形为png格式,直接打开会显示“索引”状态,此时可以通过“图像”-->“模式”-->“RGB颜色”将png变成图层,然后通过“移动”-->“顶部对齐/右边对齐”将多帧图形图层叠加对齐,然后再打上“台词”并逐个保存成png,如下图。当然不使用Photoshop,使用其他软件添加文字也行。这里将二次加工后的图形保存在“图形合并”文件夹中,方便第三步操作。

基于Python实现拆分和合并GIF动态图

第三,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动态图

当然现在有很多制作“表情包”的软件,不需要这么复杂。但这里主要是感受Python拆分GIF动态图成多个图形帧,以及合并多个图形帧成GIF动态图的过程。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
教你安装python Django(图文)
Nov 04 Python
用Python编写web API的教程
Apr 30 Python
快速排序的算法思想及Python版快速排序的实现示例
Jul 02 Python
Python设计模式之抽象工厂模式
Aug 25 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 Python
python和opencv实现抠图
Jul 18 Python
Python使用jsonpath-rw模块处理Json对象操作示例
Jul 31 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
Python 从attribute到property详解
Mar 05 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
Jun 10 Python
用Python仅20行代码编写一个简单的端口扫描器
Apr 08 Python
python  logging日志打印过程解析
Oct 22 #Python
安装2019Pycharm最新版本的教程详解
Oct 22 #Python
Python列表list常用内建函数实例小结
Oct 22 #Python
Python爬虫使用浏览器cookies:browsercookie过程解析
Oct 22 #Python
Python异常模块traceback用法实例分析
Oct 22 #Python
Python多线程爬取豆瓣影评API接口
Oct 22 #Python
Python Process多进程实现过程
Oct 22 #Python
You might like
php比较两个绝对时间的大小
2014/01/31 PHP
PHP编译安装时常见错误解决办法
2015/05/28 PHP
PHP下SSL加密解密、验证、签名方法(很简单)
2020/06/28 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
通用javascript脚本函数库 方便开发
2009/10/13 Javascript
juqery 学习之三 选择器 子元素与表单
2010/11/25 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
探索Emberjs制作一个简单的Todo应用
2012/11/07 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
用IE重起计算机或者关机的示例代码
2014/03/10 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
jQuery中的编程范式详解
2014/12/15 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python中模块pymysql查询结果后如何获取字段列表
2017/06/05 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Python 下载及安装详细步骤
2019/11/04 Python
Python嵌套函数,作用域与偏函数用法实例分析
2019/12/26 Python
python Matplotlib模块的使用
2020/09/16 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
Ann Taylor官方网站:美国最大的女性产品制造商之一
2016/09/14 全球购物
澳大利亚当地最大的时装生产商:Cue
2018/08/06 全球购物
2014年社区庆元旦活动方案
2014/03/08 职场文书
中学生秋季运动会广播稿
2014/09/21 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
合同补充协议书
2016/03/24 职场文书
python-opencv 中值滤波{cv2.medianBlur(src, ksize)}的用法
2021/06/05 Python
nginx作grpc的反向代理踩坑总结
2021/07/07 Servers