Python实现动态图解析、合成与倒放


Posted in Python onJanuary 18, 2018

动态图现在已经融入了我们的日常网络生活,大大丰富了我们的表达方式和交流趣味性。常常是一言不合就扔动图,我这里就不举例子了,例子太多,平时大家也都接触过。咱们直接开始本文的内容。

用到的库和模块

今天用看看如何用Python写个程序,进行动态图的解析、合成与倒放。这里我们用到的库有且只有PIL。而且只用到了PIL的两个模块Image和ImageSequence。顾名思义,就是图像模块和图像序列模块。动态图正好可以看作是图像序列。

简单的原理和代码

所谓动态图的解析,就是把GIF格式的图片转化为图片流的过程,而动态图的合成就是把图片流重新合成GIF图片的过程。而所谓动态图倒放,就是把图片流反序之后再合成GIF了。

原理上没啥难以理解的,我们还是直接看代码。

from PIL import Image, ImageSequence 

# 读取GIF
im = Image.open("5.gif")
# GIF图片流的迭代器
iter = ImageSequence.Iterator(im)

index = 1
# 遍历图片流的每一帧
for frame in iter:
 print("image %d: mode %s, size %s" % (index, frame.mode, frame.size))
 frame.save("./imgs/frame%d.png" % index)
 index += 1

# frame0 = frames[0]
# frame0.show()

# 把GIF拆分为图片流
imgs = [frame.copy() for frame in ImageSequence.Iterator(im)]
# 把图片流重新成成GIF动图
imgs[0].save('out.gif', save_all=True, append_images=imgs[1:])

# 图片流反序
imgs.reverse() 
# 将反序后的所有帧图像保存下来
imgs[0].save('./reverse_out.gif', save_all=True, append_images=imgs[1:])

效果

以下是动图原图、效果图。

Python实现动态图解析、合成与倒放

倒放的动态图

Python实现动态图解析、合成与倒放

动态图解析得到的图片流:

Python实现动态图解析、合成与倒放

补充说明

加上注释之后的代码完全没啥可说的有木有?

其实还还是有些地方可说的,比如图片为啥保存为PNG格式的,JPG行不行?比如第六行与第19行末尾的代码是否重复,第19行末尾能不能用iter代替?

这些问题知道的就算了,不知道的希望能够自己跑一跑代码,查一查资料,补充下这方面的小知识。

除此之外,还有哪些补充知识的方法呢?当然是看书啦~

Python 相关文章推荐
Python实现的石头剪子布代码分享
Aug 22 Python
python获取远程图片大小和尺寸的方法
Mar 26 Python
在Python中使用mechanize模块模拟浏览器功能
May 05 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
Django实现分页功能
Jul 02 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
pybind11和numpy进行交互的方法
Jul 04 Python
Python实现决策树并且使用Graphviz可视化的例子
Aug 09 Python
Python爬虫爬取、解析数据操作示例
Mar 27 Python
基于python实现坦克大战游戏
Oct 27 Python
拒绝盗图!教你怎么用python给图片加水印
Jun 04 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 #Python
Python实现在tkinter中使用matplotlib绘制图形的方法示例
Jan 18 #Python
python中requests和https使用简单示例
Jan 18 #Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 #Python
Python基于csv模块实现读取与写入csv数据的方法
Jan 18 #Python
python将字典内容存入mysql实例代码
Jan 18 #Python
python测试mysql写入性能完整实例
Jan 18 #Python
You might like
smarty静态实验表明,网络上是错的~呵呵
2006/11/25 PHP
PHP几个数学计算的内部函数学习整理
2011/08/06 PHP
PHP中创建空文件的代码[file_put_contents vs touch]
2012/01/20 PHP
使用YUI+Ant 实现JS CSS压缩
2014/09/02 PHP
php制作基于xml的RSS订阅源功能示例
2017/02/08 PHP
php简单处理XML数据的方法示例
2017/05/19 PHP
js中cookie的使用详细分析
2008/05/28 Javascript
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
JavaScript this 深入理解
2009/07/30 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
每天一篇javascript学习小结(RegExp对象)
2015/11/17 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
ReactNative中使用Redux架构总结
2017/12/15 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
基于javascript原生判断DOM是否加载完毕
2020/10/14 Javascript
详解webpack的clean-webpack-plugin插件报错
2020/10/16 Javascript
JQuery+drag.js上传图片并且实现图片拖曳
2020/11/18 jQuery
[52:02]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第一场 11.27
2020/11/30 DOTA
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
Python将图片转换为字符画的方法
2020/06/16 Python
python递归全排列实现方法
2018/08/18 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
PyCharm2020最新激活码+激活码补丁(亲测最新版PyCharm2020.2激活成功)
2020/11/25 Python
python 实现波浪滤镜特效
2020/12/02 Python
纯CSS实现的大小渐变、渐远效果
2014/04/15 HTML / CSS
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
俄罗斯天然和有机产品、健康生活网上商店:Fitomarket.ru
2020/10/09 全球购物
五一促销活动总结
2014/07/01 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
青岛市的收音机研制与生产
2022/04/07 无线电