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中使用base64模块处理字符编码的教程
Apr 28 Python
Python压缩解压缩zip文件及破解zip文件密码的方法
Nov 04 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
老生常谈进程线程协程那些事儿
Jul 24 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
python探索之BaseHTTPServer-实现Web服务器介绍
Oct 28 Python
python中pip的安装与使用教程
Aug 10 Python
Python的UTC时间转换讲解
Feb 26 Python
详解Python中namedtuple的使用
Apr 27 Python
numba提升python运行速度的实例方法
Jan 25 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 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的控制语句
2006/10/09 PHP
PHP中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
php实现字符串首字母大写和单词首字母大写的方法
2015/03/14 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
php中yar框架实例用法讲解
2020/12/27 PHP
慎用 somefunction.prototype 分析
2009/06/02 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
jQuery如何使用自动触发事件trigger
2015/11/29 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
2017/09/14 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
详解SPA中前端路由基本原理与实现方式
2018/09/12 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
VUE简单的定时器实时刷新的实现方法
2019/01/20 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
详解Python中的分组函数groupby和itertools)
2018/07/11 Python
python处理两种分隔符的数据集方法
2018/12/12 Python
Python中__repr__和__str__区别详解
2019/11/07 Python
spyder 在控制台(console)执行python文件,debug python程序方式
2020/04/20 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
特色蛋糕店创业计划书
2014/01/28 职场文书
2014年驾驶员工作总结
2014/11/18 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
诚实守信主题班会
2015/08/13 职场文书
教师素质教育心得体会
2016/01/19 职场文书
前端vue+express实现文件的上传下载示例
2022/02/18 Vue.js