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中的hypot()方法使用简介
May 18 Python
python执行使用shell命令方法分享
Nov 08 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
Django中多种重定向方法使用详解
Jul 17 Python
深入浅析Python科学计算库Scipy及安装步骤
Oct 12 Python
python数值基础知识浅析
Nov 19 Python
利用python控制Autocad:pyautocad方式
Jun 01 Python
Python3交互式shell ipython3安装及使用详解
Jul 11 Python
python爬虫scrapy基本使用超详细教程
Feb 20 Python
用Python写一个简易版弹球游戏
Apr 13 Python
Python 中面向接口编程
May 20 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
中国第一家无线电行
2021/03/01 无线电
PHP 日常开发小技巧
2009/09/23 PHP
destoon实现调用热门关键字的方法
2014/07/15 PHP
你应该知道PHP浮点数知识
2015/05/13 PHP
redis+php实现微博(三)微博列表功能详解
2019/09/23 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
jquery图片放大镜功能的实例代码
2013/03/26 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
利用js动态添加删除table行的示例代码
2013/12/16 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
2017/05/02 Javascript
vue-cli创建的项目,配置多页面的实现方法
2018/03/15 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
2018/04/12 jQuery
微信网页授权并获取用户信息的方法
2018/07/30 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
2019/11/18 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
[01:23]2014DOTA2国际邀请赛 球迷无处不在Ti现场世界杯受关注
2014/07/10 DOTA
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
python去除空格和换行符的实现方法(推荐)
2017/01/04 Python
python中文件变化监控示例(watchdog)
2017/10/16 Python
python实现串口通信的示例代码
2020/02/10 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
Python模拟登录requests.Session应用详解
2020/11/17 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
幼儿园大班家长评语
2014/04/17 职场文书
小学生环保倡议书
2014/05/15 职场文书
在职证明格式样本
2015/06/15 职场文书
php png失真的原因及解决办法
2021/11/17 PHP