基于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 21 Python
python利用MethodType绑定方法到类示例代码
Aug 27 Python
tornado 多进程模式解析
Jan 15 Python
tensorflow 中对数组元素的操作方法
Jul 27 Python
使用Python实现一个栈判断括号是否平衡
Aug 23 Python
Python读写zip压缩文件的方法
Aug 29 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
Django打印出在数据库中执行的语句问题
Jul 25 Python
tensorflow实现打印ckpt模型保存下的变量名称及变量值
Jan 04 Python
Python转换itertools.chain对象为数组的方法
Feb 07 Python
python实现自动化群控的步骤
Apr 11 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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与Java进行通信的实现方法
2013/10/21 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
PHP速成大法
2015/01/30 PHP
php简单日历函数
2015/10/28 PHP
php设计模式之单例模式代码
2016/06/11 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
Jquery实战_读书笔记1—选择jQuery
2010/01/22 Javascript
推荐10个超棒的jQuery工具提示插件
2011/10/11 Javascript
js创建元素(节点)示例
2014/01/02 Javascript
js获取指定的cookie的具体实现
2014/02/20 Javascript
JS实现让访问者自助选择网页文字颜色的方法
2015/02/24 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
jQGrid Table操作列中点击【操作】按钮弹出按钮层的实现代码
2016/12/05 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
浅谈webpack-dev-server的配置和使用
2018/05/17 Javascript
layui 表格操作列按钮动态显示的实现方法
2019/09/06 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
Python中的探索性数据分析(功能式)
2017/12/22 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
Python基于机器学习方法实现的电影推荐系统实例详解
2019/06/25 Python
微信小程序python用户认证的实现
2019/07/29 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
Django中的用户身份验证示例详解
2019/08/07 Python
python批量替换文件名中的共同字符实例
2020/03/05 Python
python matplotlib工具栏源码探析三之添加、删除自定义工具项的案例详解
2021/02/25 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
运动会邀请函范文
2014/01/31 职场文书
公司办公室岗位职责
2014/03/19 职场文书
就业意向书
2014/07/29 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
党员学习型组织心得体会
2019/06/21 职场文书