基于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中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
python编程实现希尔排序
Apr 13 Python
Python实现将一个大文件按段落分隔为多个小文件的简单操作方法
Apr 17 Python
matplotlib中legend位置调整解析
Dec 19 Python
python opencv之分水岭算法示例
Feb 24 Python
Python实现针对给定单链表删除指定节点的方法
Apr 12 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
django框架两个使用模板实例
Dec 11 Python
Tensorflow 实现释放内存
Feb 03 Python
Pytorch中.new()的作用详解
Feb 18 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
Python加速程序运行的方法
Jul 29 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数组应该有多大的分析
2009/07/30 PHP
php源代码安装常见错误与解决办法分享
2013/05/28 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
PHP实现文件上传操作和封装
2020/03/04 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
自定义一个jquery插件[鼠标悬浮时候 出现说明label]
2011/06/27 Javascript
javaScript NameSpace 简单说明介绍
2013/07/18 Javascript
node.js中的fs.fchmod方法使用说明
2014/12/16 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
JS简单实现禁止访问某个页面的方法
2016/09/13 Javascript
详解webpack解惑:require的五种用法
2017/06/09 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
去掉vue 中的代码规范检测两种方法(Eslint验证)
2018/03/21 Javascript
详解使用vue-admin-template的优化历程
2018/05/20 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
vue 扩展现有组件的操作
2020/08/14 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
Unicode和Python的中文处理
2017/03/19 Python
Python爬虫实战:分析《战狼2》豆瓣影评
2018/03/26 Python
对python中的高效迭代器函数详解
2018/10/18 Python
python3对接mysql数据库实例详解
2019/04/30 Python
Python多线程模块Threading用法示例小结
2019/11/09 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
世界上最大的隐形眼镜商店:1-800 Contacts
2018/11/03 全球购物
澳大利亚购买最佳炊具品牌网站:Cookware Brands
2019/02/16 全球购物
迎元旦广播稿
2014/02/22 职场文书
公司停电通知
2015/04/15 职场文书
2016大学生优秀志愿者事迹材料
2016/02/25 职场文书
Golang二维切片初始化的实现
2021/04/08 Golang
numpy array找出符合条件的数并赋值的示例代码
2022/06/01 Python