基于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中的函数编程
Apr 13 Python
Python中的列表生成式与生成器学习教程
Mar 13 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
Python使用matplotlib绘制多个图形单独显示的方法示例
Mar 14 Python
python3使用SMTP发送简单文本邮件
Jun 19 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
python将类似json的数据存储到MySQL中的实例
Jul 12 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
PyQt5高级界面控件之QTableWidget的具体使用方法
Feb 23 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
python之PySide2安装使用及QT Designer UI设计案例教程
Jul 26 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(1)
2006/10/09 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
Gambit vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
JS将制定内容复制到剪切板示例代码
2014/02/11 Javascript
jQuery中document与window以及load与ready 区别详解
2014/12/29 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
AngularJS控制器controller给模型数据赋初始值的方法
2017/01/04 Javascript
jquery实现下拉菜单的手风琴效果
2017/07/23 jQuery
基于js文件加载优化(详解)
2018/01/03 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
微信小程序实现点击效果
2019/06/21 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
js实现3D旋转效果
2020/08/18 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[58:58]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第二场
2018/04/05 DOTA
解析Python中while true的使用
2015/10/13 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
PyQt5每天必学之组合框
2018/04/20 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
python脚本之一键移动自定格式文件方法实例
2019/09/02 Python
基于python cut和qcut的用法及区别详解
2019/11/22 Python
python如何实时获取tcpdump输出
2020/09/16 Python
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
经典c++面试题二
2015/08/14 面试题
linux面试相关问题
2013/04/28 面试题
双语教学实施方案
2014/03/23 职场文书
卖车协议书
2014/04/21 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
用电申请报告范文
2015/05/18 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
python基础之函数的定义和调用
2021/10/24 Python