基于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中的数字类型与处理工具
Aug 02 Python
Python使用修饰器执行函数的参数检查功能示例
Sep 26 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
python实现将汉字保存成文本的方法
Nov 16 Python
python制作mysql数据迁移脚本
Jan 01 Python
python实现名片管理系统项目
Apr 26 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
Python中typing模块与类型注解的使用方法
Aug 05 Python
基于python实现计算两组数据P值
Jul 10 Python
python GUI计算器的实现
Oct 09 Python
Pandas对每个分组应用apply函数的实现
Dec 13 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句法规则详解 入门学习
2011/11/09 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
javascript下function声明一些小结
2007/12/28 Javascript
js中字符替换函数String.replace()使用技巧
2011/08/14 Javascript
jquery插件之信息弹出框showInfoDialog(成功/错误/警告/通知/背景遮罩)
2013/01/09 Javascript
jquery等待效果示例
2014/05/01 Javascript
如何让你的Lightbox支持滚轮缩放及Base64图片
2014/12/04 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
JavaScript中的this机制
2016/01/30 Javascript
js获取iframe中的window对象的实现方法
2016/05/20 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
Vue.js每天必学之方法与事件处理器
2016/09/06 Javascript
VueJS全面解析
2016/11/10 Javascript
layui弹出层效果实现代码
2017/05/19 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
Vue+penlayers实现多边形绘制及展示
2020/12/24 Vue.js
Python3.x和Python2.x的区别介绍
2013/02/12 Python
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python2.7的编码问题与解决方法
2016/10/04 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python聊天室程序(基础版)
2018/04/01 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
修改Pandas的行或列的名字(重命名)
2019/12/18 Python
基于python实现文件加密功能
2020/01/06 Python
详解用python -m http.server搭一个简易的本地局域网
2020/09/24 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
Wiggle中国:英国骑行、跑步、游泳 & 铁三运动装备专卖网店
2016/08/02 全球购物
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
大学自主招生自荐信范文
2014/02/26 职场文书
文科毕业生自荐书范文
2014/04/17 职场文书
事业单位个人总结
2015/02/12 职场文书
自主招生自荐信格式
2015/03/04 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
SpringBoot Http远程调用的方法
2022/08/14 Java/Android