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生成随机数的方法
Jan 14 Python
Python中类的继承代码实例
Oct 28 Python
python更新列表的方法
Jul 28 Python
Python中利用Scipy包的SIFT方法进行图片识别的实例教程
Jun 03 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
python使用str & repr转换字符串
Oct 13 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
python处理xml文件的方法小结
May 02 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
python编写softmax函数、交叉熵函数实例
Jun 11 Python
python selenium 获取接口数据的实现
Dec 07 Python
详解Python内置模块Collections
Mar 22 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的输入输出流
2007/02/14 PHP
一周让你学会PHP 不错的学习资料
2009/02/06 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
Display SQL Server Login Mode
2007/06/21 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
Javascript非构造函数的继承
2015/04/27 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
jQuery中checkbox反复调用attr('checked', true/false)只有第一次生效的解决方法
2016/11/16 Javascript
JavaScript中从setTimeout与setInterval到AJAX异步
2017/02/13 Javascript
React如何避免重渲染
2018/04/10 Javascript
解决layui上传文件提示上传异常,实际文件已经上传成功的问题
2018/08/19 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
JavaScript实现世界各地时间显示
2020/09/07 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
python读写二进制文件的方法
2015/05/09 Python
Python requests库用法实例详解
2018/08/14 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
python实现控制台输出颜色
2021/03/02 Python
HTML5 canvas实现雪花飘落特效
2016/03/08 HTML / CSS
HolidayLettings英国:预订最好的度假公寓、别墅和自助式住宿
2019/08/27 全球购物
木工主管岗位职责
2013/12/08 职场文书
小学教研工作制度
2014/01/15 职场文书
高校教师自荐信范文
2014/03/13 职场文书
法律七进实施方案
2014/03/15 职场文书
党支部综合考察材料
2014/05/19 职场文书
六查六看六改心得体会
2014/10/14 职场文书
高中家长意见怎么写
2015/06/03 职场文书
年终工作总结范文
2019/06/20 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL