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实现360皮肤按钮控件示例
Feb 21 Python
Python下singleton模式的实现方法
Jul 16 Python
python通过自定义isnumber函数判断字符串是否为数字的方法
Apr 23 Python
Python中的urllib模块使用详解
Jul 07 Python
Python实现一个服务器监听多个客户端请求
Apr 12 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
Feb 14 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
Python hashlib模块加密过程解析
Nov 05 Python
Python 复平面绘图实例
Nov 21 Python
python全局变量引用与修改过程解析
Jan 07 Python
python des,aes,rsa加解密的实现
Jan 16 Python
python 常用的异步框架汇总整理
Jun 18 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 配置open_basedir 让各虚拟站点独立运行
2009/11/12 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
那些年一起学习的PHP(三)
2012/03/22 PHP
php实现插入排序
2015/03/29 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
基于vue的fullpage.js单页滚动插件
2017/03/20 Javascript
详解Vue路由开启keep-alive时的注意点
2017/06/20 Javascript
javascript用rem来做响应式开发
2018/01/13 Javascript
浅谈js闭包理解
2019/03/28 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
2019/04/11 Javascript
TypeScript开发Node.js程序的方法
2019/04/30 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
Python多线程学习资料
2012/12/19 Python
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
2016/06/14 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python获取二维矩阵每列最大值的方法
2018/04/03 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
Java文件和目录(IO)操作
2014/08/26 面试题
电子商务专业毕业生求职信
2014/06/12 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
校园游戏活动新闻稿
2014/10/15 职场文书
收入证明申请书
2015/06/12 职场文书
vue项目多环境配置(.env)的实现
2021/07/21 Vue.js