前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现动态图的解析、合成与倒放

Python实现动态图的解析、合成与倒放

作者头像
用户1332428
发布2018-07-30 14:56:04
5380
发布2018-07-30 14:56:04
举报
文章被收录于专栏:人工智能LeadAI

正文共540个字,3张图,预计阅读时间5分钟。

动态图现在已经融入了我们的日常网络生活,大大丰富了我们的表达方式和交流趣味性。常常是一言不合就放动图,我这里就不举例子了。咱们直接开始本文的内容。

用到的库和模块

今天用看看如何用Python写个程序,进行动态图的解析、合成与倒放。这里我们用到的库有且只有PIL。而且只用到了PIL的两个模块Image和ImageSequence。顾名思义,就是图像模块和图像序列模块。动态图正好可以看作是图像序列。

原理

所谓动态图的解析,就是把GIF格式的图片转化为图片流的过程,而动态图的合成就是把图片流重新合成GIF图片的过程。而所谓动态图倒放,就是把图片流反序之后再合成GIF了。

代码

原理上没啥难以理解的,我们还是直接看代码。

代码语言:javascript
复制
 1from PIL import Image, ImageSequence 
 2# 读取GIF
 3im = Image.open("5.gif")
 4# GIF图片流的迭代器
 5iter = ImageSequence.Iterator(im)
 6index = 1
 7# 遍历图片流的每一帧
 8for frame in iter:
 9print("image %d: mode %s, size %s" % (index, frame.mode, frame.size))
10frame.save("./imgs/frame%d.png" % index)
11index += 1
12# frame0 = frames[0]
13# frame0.show()
14# 把GIF拆分为图片流
15imgs = [frame.copy() for frame in ImageSequence.Iterator(im)]
16# 把图片流重新成成GIF动图
17imgs[0].save('out.gif', save_all=True, append_images=imgs[1:])
18# 图片流反序
19imgs.reverse() 
20# 将反序后的所有帧图像保存下来
21imgs[0].save('./reverse_out.gif', save_all=True, append_images=imgs[1:])

加上注释之后的代码完全没啥可说的有木有?

其实还还是有些地方可说的,比如图片为啥保存为PNG格式的,JPG行不行?比如第六行与第19行末尾的代码是否重复,第19行末尾能不能用iter代替?

这些问题知道的就算了,不知道的希望能够自己跑一跑代码,查一查资料,补充下这方面的小知识。

效果

倒放

图片流

原文链接:https://www.jianshu.com/p/bc10b3985e93

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-07-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能LeadAI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档