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 PIL模块与随机生成中文验证码
Feb 27 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
Oct 22 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
python tkinter组件摆放方式详解
Sep 16 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
用 Python 制作地球仪的方法
Apr 24 Python
Python安装Bs4的多种方法
Nov 28 Python
python 爬虫爬取京东ps4售卖情况
Dec 18 Python
利用python查看数组中的所有元素是否相同
Jan 08 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代码
2006/12/06 PHP
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
基于php权限分配的实现代码
2013/04/28 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
Web程序工作原理详解
2014/12/25 PHP
php命令行写shell实例详解
2018/07/19 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
背景图跟随鼠标移动的Mootools插件实现代码
2011/12/12 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
关于JavaScript对象的动态选择及遍历对象
2014/03/10 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
a标签click和href执行顺序探讨
2014/06/23 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
前端弹出对话框 js实现ajax交互
2016/09/09 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
EasyUI实现下拉框多选功能
2017/11/07 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
2020/09/22 Javascript
[20:46]Ti4循环赛第三日VG vs DK
2014/07/12 DOTA
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
Tensorflow中的placeholder和feed_dict的使用
2018/07/09 Python
Python3.5文件读与写操作经典实例详解
2019/05/01 Python
python实现切割url得到域名、协议、主机名等各个字段的例子
2019/07/25 Python
解决Django 在ForeignKey中出现 non-nullable field错误的问题
2019/08/06 Python
Python同时处理多个异常的方法
2020/07/28 Python
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
大学军训自我鉴定
2013/12/15 职场文书
报关报检委托书
2014/04/08 职场文书
志愿者事迹材料
2014/12/26 职场文书
Oracle 多表查询基本语法实例
2022/04/18 Oracle
Python实现简单得递归下降Parser
2022/05/02 Python
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL