基于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 cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
详解Python 协程的详细用法使用和例子
Jun 15 Python
Flask框架各种常见装饰器示例
Jul 17 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
Python3 实现爬取网站下所有URL方式
Jan 16 Python
python各层级目录下import方法代码实例
Jan 20 Python
Python拼接字符串的7种方式详解
Mar 19 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
Python3如何在服务器打印资产信息
Aug 27 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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下删除字符串中HTML标签的函数
2008/08/27 PHP
为百度UE编辑器上传图片添加水印功能
2015/04/16 PHP
php编译安装php-amq扩展简明教程
2016/06/25 PHP
jQuery 一个图片切换的插件
2011/10/09 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
javascript的变量、传值、传址、参数之间关系
2015/07/26 Javascript
JS实现仿新浪微博发布内容为空时提示功能代码
2015/08/19 Javascript
Javascript 5种方法实现过滤删除前后所有空格
2016/06/22 Javascript
js选项卡的制作方法
2017/01/23 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
js仿微博动态栏功能
2017/02/22 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
详谈js中标准for循环与foreach(for in)的区别
2017/11/02 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
JavaScript刷新页面的几种方法总结
2019/03/28 Javascript
微信小程序开发之左右分栏效果的实例代码
2019/05/20 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
[02:38]DOTA2英雄基础教程 噬魂鬼
2014/01/03 DOTA
Python类的用法实例浅析
2015/05/27 Python
python多进程共享变量
2016/04/06 Python
python3.6 +tkinter GUI编程 实现界面化的文本处理工具(推荐)
2017/12/20 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
NumPy中的维度Axis详解
2019/11/26 Python
pytorch加载语音类自定义数据集的方法教程
2020/11/10 Python
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
大学开学计划书
2014/04/30 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
2015年共青团工作总结
2015/05/15 职场文书
警示教育片观后感
2015/06/17 职场文书
《失物招领》教学反思
2016/02/20 职场文书
2019职场实习报告该怎么写?
2019/07/01 职场文书
Python OpenCV快速入门教程
2021/04/17 Python
解析Java异步之call future
2021/06/14 Java/Android