基于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 相关文章推荐
对dataframe进行列相加,行相加的实例
Jun 08 Python
Python全局变量与局部变量区别及用法分析
Sep 03 Python
Python3简单爬虫抓取网页图片代码实例
Aug 26 Python
Python 如何提高元组的可读性
Aug 26 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
Python中的延迟绑定原理详解
Oct 11 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
Python Pandas数据分析工具用法实例
Nov 05 Python
Python中Numpy和Matplotlib的基本使用指南
Nov 02 Python
深入理解Pytorch微调torchvision模型
Nov 11 Python
pd.DataFrame中的几种索引变换的实现
Jun 16 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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
JS实现php的伪分页
2008/05/25 PHP
php开发环境配置记录
2011/01/14 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
JS实现固定在右下角可展开收缩DIV层的方法
2015/02/13 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
jQuery内容筛选选择器实例代码
2017/02/06 Javascript
javascript 删除数组元素和清空数组的简单方法
2017/02/24 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
分析javascript原型及原型链
2018/03/18 Javascript
使用vue-cli打包过程中的步骤以及问题的解决
2018/05/08 Javascript
NodeJs 实现简单WebSocket即时通讯的示例代码
2019/08/05 NodeJs
微信小程序利用button控制条件标签的变量问题
2020/03/15 Javascript
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
浅谈python 线程池threadpool之实现
2017/11/17 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
python实现桌面壁纸切换功能
2019/01/21 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
python next()和iter()函数原理解析
2020/02/07 Python
翻转数列python实现,求前n项和,并能输出整个数列的案例
2020/05/03 Python
python中线程和进程有何区别
2020/06/17 Python
python中setuptools的作用是什么
2020/06/19 Python
基于Python正确读取资源文件
2020/09/14 Python
django跳转页面传参的实现
2020/09/17 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
如何写出好的Java代码
2014/04/25 面试题
总经理助理职责
2014/02/04 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
2019年教师节祝福语精选,给老师送上真诚的祝福
2019/09/09 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL
《乙女游戏世界对路人角色很不友好》OP主题曲无字幕动画MV公开
2022/04/05 日漫