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

七月 上海 | 高性能计算之GPU CUDA培训

7月27-29日 640?wx_fmt=jpeg 三天密集式学习  快速带你入门 阅读全文 >


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


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


用到的库和模块


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


原理


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


代码


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


 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代替?


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


效果

640?wx_fmt=gif


倒放


640?wx_fmt=gif


图片流


640?wx_fmt=png

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


查阅更为简洁方便的分类文章以及最新的课程、产品信息,请移步至全新呈现的“LeadAI学院官网”:

www.leadai.org


请关注人工智能LeadAI公众号,查看更多专业文章

640?wx_fmt=jpeg

大家都在看

640.png?

LSTM模型在问答系统中的应用

基于TensorFlow的神经网络解决用户流失概览问题

最全常见算法工程师面试题目整理(一)

最全常见算法工程师面试题目整理(二)

TensorFlow从1到2 | 第三章 深度学习革命的开端:卷积神经网络

装饰器 | Python高级编程

今天不如来复习下Python基础

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值