基于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中getattr函数使用方法 getattr实现工厂模式
Jan 20 Python
python列表操作实例
Jan 14 Python
在Python的Django框架下使用django-tagging的教程
May 30 Python
python的Tqdm模块的使用
Jan 10 Python
学习Python selenium自动化网页抓取器
Jan 20 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
python和shell获取文本内容的方法
Jun 05 Python
Python模块_PyLibTiff读取tif文件的实例
Jan 13 Python
python-sys.stdout作为默认函数参数的实现
Feb 21 Python
Python3如何在服务器打印资产信息
Aug 27 Python
教你如何用python开发一款数字推盘小游戏
Apr 14 Python
python自动化之如何利用allure生成测试报告
May 02 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
历史证明,懒惰才是推动科学发展技术进步的动力
2021/03/02 无线电
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
使用swoole扩展php websocket示例
2014/02/13 PHP
php获取URL中带#号等特殊符号参数的解决方法
2014/09/02 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
php模拟post提交请求调用接口示例解析
2020/08/07 PHP
js 内存释放问题
2010/04/25 Javascript
jquery isType() 类型判断代码
2011/02/14 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
2015/11/04 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
原生JS实现小小的音乐播放器
2017/10/16 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
JS实现指定区域的全屏显示功能示例
2019/04/25 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
Python做文本按行去重的实现方法
2016/10/19 Python
老生常谈Python序列化和反序列化
2017/06/28 Python
关于Python3 类方法、静态方法新解
2019/08/30 Python
详解python 中in 的 用法
2019/12/12 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
新西兰珠宝品牌:Michael Hill
2017/09/16 全球购物
质量保证书范本
2014/04/29 职场文书
项目经理任命书内容
2014/06/06 职场文书
领导干部查摆“四风”问题自我剖析材料思想汇报
2014/10/05 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技