基于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进行基础的函数式编程的教程
Mar 31 Python
在Python中封装GObject模块进行图形化程序编程的教程
Apr 14 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
python实现12306火车票查询器
Apr 20 Python
Python实现的字典值比较功能示例
Jan 08 Python
windows下添加Python环境变量的方法汇总
May 14 Python
Python下调用Linux的Shell命令的方法
Jun 12 Python
Python读取YUV文件,并显示的方法
Dec 04 Python
pandas中DataFrame修改index、columns名的方法示例
Aug 02 Python
Python循环实现n的全排列功能
Sep 16 Python
django实现后台显示媒体文件
Apr 07 Python
python 匿名函数与三元运算学习笔记
Oct 23 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
轻松修复Discuz!数据库
2008/05/03 PHP
php中 ob_start等函数截取标准输出的方法
2015/06/22 PHP
PHP实现简单数字分页效果
2015/07/26 PHP
PHP Ajax JavaScript Json获取天气信息实现代码
2016/08/17 PHP
PHP后端银联支付及退款实例代码
2017/06/23 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
JavaScript中的字符串操作详解
2013/11/12 Javascript
bootstrap data与jquery .data
2014/07/07 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
一起学写js Calender日历控件
2016/04/14 Javascript
JS重载实现方法分析
2016/12/16 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
vue多个元素的样式选择器问题
2019/11/29 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python实现把两个二维array叠加成三维array示例
2019/11/29 Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
2019/12/12 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
法国足球商店:Footcenter
2019/07/06 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
美国留学经济担保书
2014/05/20 职场文书
党员群众路线对照检查材料
2014/08/31 职场文书
无犯罪记录证明范本
2014/09/15 职场文书
教师节寄语2015
2015/03/23 职场文书
用人单位聘用意向书
2015/05/11 职场文书
导游词之西递宏村
2019/12/10 职场文书
Python中np.random.randint()参数详解及用法实例
2022/09/23 Python