基于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中使用tarfile压缩、解压tar归档文件示例
Apr 05 Python
使用Python生成随机密码的示例分享
Feb 18 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
对python中类的继承与方法重写介绍
Jan 20 Python
python 含子图的gif生成时内存溢出的方法
Jul 07 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
Oct 30 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 Python
Python获取android设备cpu和内存占用情况
Nov 15 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 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
discuz论坛 用户登录 后台程序代码
2008/11/27 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
JQuery在光标位置插入内容的实现代码
2010/06/18 Javascript
javascript hasFocus使用实例
2010/06/29 Javascript
JavaScript动态修改弹出窗口大小的方法
2015/04/06 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
使用puppeteer爬取网站并抓出404无效链接
2018/12/20 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
[04:36]DOTA2国际邀请赛 ti3精彩集锦
2013/08/19 DOTA
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
介绍Python的Urllib库的一些高级用法
2015/04/30 Python
Python多线程爬虫简单示例
2016/03/04 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
2016/12/23 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
基于 Django 的手机管理系统实现过程详解
2019/08/16 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
使用K.function()调试keras操作
2020/06/17 Python
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
Coltorti Boutique官网:来自意大利的设计师品牌买手店
2018/11/09 全球购物
英国首屈一指的票务公司:See Tickets
2019/05/11 全球购物
英智兴达软件测试笔试题
2016/10/12 面试题
国际贸易专业推荐信
2013/11/15 职场文书
机电专业个人求职信范文
2013/12/30 职场文书
九年级英语教学反思
2014/01/31 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js