基于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中使用第三方库xlutils来追加写入Excel文件示例
Apr 05 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
Python PyQt5实现的简易计算器功能示例
Aug 23 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
Python程序员面试题 你必须提前准备!
Jan 16 Python
Python温度转换实例分析
Jan 17 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
python 多进程共享全局变量之Manager()详解
Aug 15 Python
基于Python共轭梯度法与最速下降法之间的对比
Apr 02 Python
python解释器安装教程的方法步骤
Jul 02 Python
爬虫代理的cookie如何生成运行
Sep 22 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 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入门速成(2)
2006/10/09 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
PHP对象克隆clone用法示例
2016/09/28 PHP
PDO::exec讲解
2019/01/28 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
javascript语言结构小记(一)
2011/09/10 Javascript
jQuery.Validate验证库的使用介绍
2013/04/26 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
基于JQuery制作可编辑的表格特效
2014/12/23 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
前端开发基础javaScript的六大作用
2020/08/06 Javascript
python合并文本文件示例
2014/02/07 Python
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
2014/04/25 Python
Python 自动补全(vim)
2014/11/30 Python
python获取一组汉字拼音首字母的方法
2015/07/01 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
python定时关机小脚本
2018/06/20 Python
python 列表转为字典的两个小方法(小结)
2019/06/28 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
2014年清明节寄语
2014/04/03 职场文书
教师党员自我评价2015
2015/03/04 职场文书
行为习惯主题班会
2015/08/14 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript
Windows Server 2012配置DNS服务器的方法
2022/04/29 Servers