Python实现动态图的解析、合成与倒放
动态图现在已经融入了我们的日常网络生活,大大丰富了我们的表达方式和交流趣味性。常常是一言不合就放动图,我这里就不举例子了。咱们直接开始本文的内容。
用到的库和模块
今天用看看如何用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:])
加上注释之后的代码完全没啥可说的有木有?
其实还还是有些地方可说的,比如图片为啥保存为
PNG
格式的,JPG
行不行?比如第六行与第19行末尾的代码是否重复,第19行末尾能不能用iter
代替?这些问题知道的就算了,不知道的希望能够自己跑一跑代码,查一查资料,补充下这方面的小知识。
效果
这里写图片描述
【Python实现动态图的解析、合成与倒放】倒放
这里写图片描述
图片流
文章图片
这里写图片描述
公众号CVPy,分享OpenCV和Python的实战内容。。欢迎关注。
文章图片
公众号CVPy
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- MybatisPlus使用queryWrapper如何实现复杂查询
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- 孩子不是实现父母欲望的工具——林哈夫
- opencv|opencv C++模板匹配的简单实现
- Node.js中readline模块实现终端输入
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- java中如何实现重建二叉树