- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python实现动态图解析、合成与倒放由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
动态图现在已经融入了我们的日常网络生活,大大丰富了我们的表达方式和交流趣味性。常常是一言不合就扔动图,我这里就不举例子了,例子太多,平时大家也都接触过。咱们直接开始本文的内容.
用到的库和模块 。
今天用看看如何用Python写个程序,进行动态图的解析、合成与倒放。这里我们用到的库有且只有PIL。而且只用到了PIL的两个模块Image和ImageSequence。顾名思义,就是图像模块和图像序列模块。动态图正好可以看作是图像序列.
简单的原理和代码 。
所谓动态图的解析,就是把GIF格式的图片转化为图片流的过程,而动态图的合成就是把图片流重新合成GIF图片的过程。而所谓动态图倒放,就是把图片流反序之后再合成GIF了.
原理上没啥难以理解的,我们还是直接看代码.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
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实现动态图解析、合成与倒放的文章就讲到这里了,如果你想了解更多关于Python实现动态图解析、合成与倒放的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想要实现的是交互式动画 Logo 。默认情况下,它位于第 1 帧。悬停时,它会向前播放并在最后一帧处停止。在 mouseleave 上,它从最后一帧播放到第一帧(向后)并在第一帧停止。如果在向前动画
我是一名优秀的程序员,十分优秀!