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高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
Python使用CMD模块更优雅的运行脚本
May 11 Python
放弃 Python 转向 Go语言有人给出了 9 大理由
Oct 20 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
Python3.7中安装openCV库的方法
Jul 11 Python
Python 实现两个列表里元素对应相乘的方法
Nov 14 Python
python使用Plotly绘图工具绘制水平条形图
Mar 25 Python
python字典一键多值实例代码分享
Jun 14 Python
Djang的model创建的字段和参数详解
Jul 27 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
Python代码覆盖率统计工具coverage.py用法详解
Nov 25 Python
Python虚拟环境virtualenv是如何使用的
Jun 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
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
PHP sprintf()函数用例解析
2011/05/18 PHP
js+php实现静态页面实时调用用户登陆状态的方法
2015/01/04 PHP
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
2009/10/24 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
JS判断浏览器是否安装flash插件的简单方法
2016/09/13 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
vue-router 导航钩子的具体使用方法
2017/08/31 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
使用python获取CPU和内存信息的思路与实现(linux系统)
2014/01/03 Python
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
python 获取网页编码方式实现代码
2017/03/11 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
Python爬虫使用脚本登录Github并查看信息
2018/07/16 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
用Python 执行cmd命令
2020/12/18 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
PHP如何防止SQL注入
2014/05/03 面试题
String和StringBuffer的区别
2015/08/13 面试题
市场推广策划方案
2014/06/02 职场文书
生活小常识广播稿
2014/09/16 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
使用ORM新增数据在Mysql中的操作步骤
2021/07/26 MySQL
vue实力踩坑之push当前页无效
2022/04/10 Vue.js
python turtle绘图
2022/05/04 Python