基于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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python实现的Kmeans++算法实例
Apr 26 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Java分治归并排序算法实例详解
Dec 12 Python
利用Python在一个文件的头部插入数据的实例
May 02 Python
解决python3 pika之连接断开的问题
Dec 18 Python
PyQt QCombobox设置行高的方法
Jun 20 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 Python
Python实现的扫码工具居然这么好用!
Jun 07 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 Python
python字典的元素访问实例详解
Jul 21 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 has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
DLL+ ActiveX控件+WEB页面调用例子
2010/08/07 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(一)让静态人物动起来
2013/01/23 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
js使用心得分享
2015/01/13 Javascript
JavaScript获取元素尺寸和大小操作总结
2015/02/27 Javascript
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
jQuery zTree 异步加载添加子节点重复问题
2017/11/29 jQuery
[01:48]完美圣典齐天大圣至宝宣传片
2016/12/17 DOTA
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
详解Python中的文件操作
2016/08/28 Python
Python上下文管理器和with块详解
2017/09/09 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
python3 使用openpyxl将mysql数据写入xlsx的操作
2020/05/15 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
Bibloo荷兰:女士、男士和儿童的服装、鞋子和配饰
2019/02/25 全球购物
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
GWT的应用有哪两种部署模式
2012/12/21 面试题
设置器与访问器的定义以及各自特点
2016/01/08 面试题
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
帮你提高开发效率的JavaScript20个技巧
2021/06/18 Javascript
利用Python实现Picgo图床工具
2021/11/23 Python
Redis基本数据类型Set常用操作命令
2022/06/01 Redis