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中使用成员运算符的示例
May 13 Python
Python实例一个类背后发生了什么
Feb 09 Python
Python科学计算之NumPy入门教程
Jan 15 Python
Python实现网站注册验证码生成类
Jun 08 Python
python构建自定义回调函数详解
Jun 20 Python
python切片的步进、添加、连接简单操作示例
Jul 11 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
python使用html2text库实现从HTML转markdown的方法详解
Feb 21 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 Python
一起来学习Python的元组和列表
Mar 13 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,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
2012/05/07 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
javascript web对话框与弹出窗口
2009/02/22 Javascript
学习ExtJS form布局
2009/10/08 Javascript
JQuery从头学起第三讲
2010/07/06 Javascript
jQuery+CSS 实现随滚动条增减的汽水瓶中的液体效果
2011/09/26 Javascript
jquery的ajax和getJson跨域获取json数据的实现方法
2014/02/04 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
Node.js实现批量去除BOM文件头
2014/12/20 Javascript
JavaScript获取select中text值的方法
2017/02/13 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
2017/07/30 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
jQuery模仿ToDoList实现简单的待办事项列表
2019/12/30 jQuery
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
详解python的数字类型变量与其方法
2016/11/20 Python
python flask 多对多表查询功能
2017/06/25 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
canvas 阴影和图形变换的示例代码
2018/01/02 HTML / CSS
Aquatalia官网:意大利著名鞋履品牌
2019/09/26 全球购物
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
DOM和JQuery对象有什么区别
2016/11/11 面试题
校园广播稿500字
2014/02/04 职场文书
竞选文艺委员演讲稿
2014/04/28 职场文书
公司租房协议书
2014/10/14 职场文书
汽车转让协议书范本
2014/12/07 职场文书
学生评语集锦
2015/01/04 职场文书
2015年公司国庆放假通知
2015/07/30 职场文书
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript