基于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基于二分查找实现求整数平方根的方法
May 12 Python
Tornado Web Server框架编写简易Python服务器
Jul 28 Python
Python异常处理操作实例详解
Aug 28 Python
python实现将多个文件分配到多个文件夹的方法
Jan 07 Python
Python逐行读取文件中内容的简单方法
Feb 26 Python
Python实现最常见加密方式详解
Jul 13 Python
python切片(获取一个子列表(数组))详解
Aug 09 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
Python 中由 yield 实现异步操作
May 04 Python
Python优秀开源项目Rich源码解析的流程分析
Jul 06 Python
Python如何实现大型数组运算(使用NumPy)
Jul 24 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 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可逆加密函数(分享)
2013/06/06 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
Javascript 中的 && 和 || 使用小结
2010/04/25 Javascript
jQuery的.live()和.die() 使用介绍
2011/09/10 Javascript
图片img的src不变让浏览器重新加载实现方法
2013/03/29 Javascript
多选列表框动态添加,移动,删除,全选等操作的简单实例
2014/01/13 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
JavaScript函数的调用以及参数传递
2015/10/21 Javascript
详解js图片轮播效果实现原理
2015/12/17 Javascript
实例剖析AngularJS框架中数据的双向绑定运用
2016/03/04 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
基于JS实现导航条flash导航条
2016/06/17 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
微信小程序 实战程序简易新闻的制作
2017/01/09 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
JavaScript定时器setTimeout()和setInterval()详解
2017/08/18 Javascript
jQuery实现所有验证通过方可提交的表单验证
2017/11/21 jQuery
浅谈angularJS2中的界面跳转方法
2018/08/31 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
解决vue 子组件修改父组件传来的props值报错问题
2019/11/09 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
python之wxPython应用实例
2014/09/28 Python
python搜索指定目录的方法
2015/04/29 Python
自己使用总结Python程序代码片段
2015/06/02 Python
Python实现简单的代理服务器
2015/07/25 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
2020/04/14 Python
幼儿教师国培感言
2014/02/19 职场文书
爱牙日活动总结
2014/08/29 职场文书
2015年领班工作总结
2015/04/29 职场文书
表扬信范文
2019/04/22 职场文书
详解Python为什么不用设计模式
2021/06/24 Python
Golang流模式之grpc的四种数据流
2022/04/13 Golang