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获取服务器信息的最简单实现方法
Mar 05 Python
python实现类的静态变量用法实例
May 08 Python
Python语法快速入门指南
Oct 12 Python
Python的Django中将文件上传至七牛云存储的代码分享
Jun 03 Python
Python+matplotlib+numpy绘制精美的条形统计图
Jan 02 Python
python 实现判断ip连通性的方法总结
Apr 22 Python
基于python实现学生管理系统
Oct 17 Python
python中将zip压缩包转为gz.tar的方法
Oct 18 Python
Flask框架学习笔记之使用Flask实现表单开发详解
Aug 12 Python
OpenCV+face++实现实时人脸识别解锁功能
Aug 28 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
Feb 15 Python
Django实现后台上传并显示图片功能
May 29 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.NET的WebService的代码
2011/04/22 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
PHP使用内置dir类实现目录遍历删除
2015/03/31 PHP
php获取当前url地址的方法小结
2017/01/10 PHP
jQueryUI如何自定义组件实现代码
2010/11/14 Javascript
Javascript改变CSS样式(局部和全局)
2013/12/18 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
js游戏人物上下左右跑步效果代码分享
2015/08/28 Javascript
学习JavaScript设计模式之状态模式
2016/01/08 Javascript
jQuery实现frame之间互通的方法
2017/06/26 jQuery
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
python读取注册表中值的方法
2013/04/08 Python
python中enumerate的用法实例解析
2014/08/18 Python
构建Python包的五个简单准则简介
2015/06/15 Python
Python 数据结构之旋转链表
2017/02/25 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Python Django 命名空间模式的实现
2019/08/09 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
python实现斗地主分牌洗牌
2020/06/22 Python
CSS3 Flex 弹性布局实例代码详解
2018/11/01 HTML / CSS
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
Bluebella德国官网:英国性感内衣和睡衣品牌
2019/11/08 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
军训自我鉴定怎么写
2014/02/13 职场文书
3的组成教学反思
2014/04/30 职场文书
酒店爱岗敬业演讲稿
2014/09/02 职场文书
党员民主生活会对照检查材料思想汇报
2014/09/28 职场文书
正风肃纪剖析材料范文
2014/10/10 职场文书
团队执行力培训心得体会
2015/08/15 职场文书
《法国号》教学反思
2016/02/22 职场文书
MySQL CHAR和VARCHAR该如何选择
2021/05/31 MySQL
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang