基于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 相关文章推荐
rhythmbox中文名乱码问题解决方法
Sep 06 Python
python比较两个列表是否相等的方法
Jul 28 Python
Python实现的弹球小游戏示例
Aug 01 Python
python中requests库session对象的妙用详解
Oct 30 Python
python实现简单淘宝秒杀功能
May 03 Python
Python中的 enum 模块源码详析
Jan 09 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
Feb 28 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
Oct 25 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
python怎么判断素数
Jul 01 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 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
我的论坛源代码(三)
2006/10/09 PHP
php仿ZOL分页类代码
2008/10/02 PHP
PHP is_subclass_of函数的一个BUG和解决方法
2014/06/01 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
js验证表单第二部分
2006/11/25 Javascript
Javascript Boolean、Nnumber、String 强制类型转换的区别详细介绍
2012/12/13 Javascript
Javascript基础教程之数据类型 (字符串 String)
2015/01/18 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
原生js图片轮播效果实现代码
2016/10/19 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
vue2.0 子组件改变props值,并向父组件传值的方法
2018/03/01 Javascript
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
vue+Vue Router多级侧导航切换路由(页面)的实现代码
2018/12/20 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Python中的面向对象编程详解(上)
2015/04/13 Python
用Python实现一个简单的多线程TCP服务器的教程
2015/05/05 Python
python判断字符串是否是json格式方法分享
2017/11/07 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
Python-opencv 双线性插值实例
2020/01/17 Python
利用django创建一个简易的博客网站的示例
2020/09/29 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
《将心比心》教学反思
2014/04/08 职场文书
施工安全生产承诺书
2014/05/23 职场文书
法人委托书的范本格式
2014/09/11 职场文书
2014年党委工作总结
2014/11/22 职场文书
护士岗位竞聘书
2015/09/15 职场文书
MySQL infobright的安装步骤
2021/04/07 MySQL
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP