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登录Dr.com思路以及代码分享
Jun 25 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
Python3实现的简单验证码识别功能示例
May 02 Python
Python3处理HTTP请求的实例
May 10 Python
Python发送邮件测试报告操作实例详解
Dec 08 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
Apr 26 Python
python实现nao机器人身体躯干和腿部动作操作
Apr 29 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 Python
Python QT组件库qtwidgets的使用
Nov 02 Python
python自动化之如何利用allure生成测试报告
May 02 Python
Python jiaba库的使用详解
Nov 23 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
php冒泡排序、快速排序、快速查找、二维数组去重实例分享
2014/04/24 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
JQuery.closest(),parent(),parents()寻找父结点
2012/02/17 Javascript
增强用户体验友好性之jquery easyui window 窗口关闭时的提示
2012/06/22 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
node.js中的http.request.end方法使用说明
2014/12/10 Javascript
jquery删除指定子元素代码实例
2015/01/13 Javascript
scrollWidth,clientWidth,offsetWidth的区别
2015/01/13 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
Python中使用PDB库调试程序
2015/04/05 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
详解Python中heapq模块的用法
2016/06/28 Python
python对象及面向对象技术详解
2016/07/19 Python
Python基于分水岭算法解决走迷宫游戏示例
2017/09/26 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
使用python3实现操作串口详解
2019/01/01 Python
Python Pandas分组聚合的实现方法
2019/07/02 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
python 子类调用父类的构造函数实例
2020/03/12 Python
如何安装并在pycharm使用selenium的方法
2020/04/30 Python
浅谈基于Canvas的手绘风格图形库Rough.js
2018/03/19 HTML / CSS
探矿工程师自荐信
2014/01/24 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
超市工作总结范文2014
2014/12/19 职场文书
新手初学Java网络编程
2021/07/07 Java/Android
Python利用capstone实现反汇编
2022/04/06 Python
pycharm无法安装cv2模块问题
2022/05/20 Python