- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章Python图像处理之gif动态图的解析与合成操作详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了python图像处理之gif动态图的解析与合成操作。分享给大家供大家参考,具体如下:
gif动态图是在现在已经司空见惯,朋友圈里也经常是一言不合就斗图。这里,就介绍下如何使用python来解析和生成gif图像.
1、gif动态图的合成 。
如下图,是一个gif动态图.
gif动态图的解析可以使用pil图像模块即可,具体代码如下:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#-*- coding: utf-8 -*-
import
os
from
pil
import
image
def
analyseimage(path):
'''
pre-process pass over the image to determine the mode (full or additive).
necessary as assessing single frames isn't reliable. need to know the mode
before processing all frames.
'''
im
=
image.
open
(path)
results
=
{
'size'
: im.size,
'mode'
:
'full'
,
}
try
:
while
true:
if
im.tile:
tile
=
im.tile[
0
]
update_region
=
tile[
1
]
update_region_dimensions
=
update_region[
2
:]
if
update_region_dimensions !
=
im.size:
results[
'mode'
]
=
'partial'
break
im.seek(im.tell()
+
1
)
except
eoferror:
pass
return
results
def
processimage(path):
'''
iterate the gif, extracting each frame.
'''
mode
=
analyseimage(path)[
'mode'
]
im
=
image.
open
(path)
i
=
0
p
=
im.getpalette()
last_frame
=
im.convert(
'rgba'
)
try
:
while
true:
print
"saving %s (%s) frame %d, %s %s"
%
(path, mode, i, im.size, im.tile)
'''
if the gif uses local colour tables, each frame will have its own palette.
if not, we need to apply the global palette to the new frame.
'''
if
not
im.getpalette():
im.putpalette(p)
new_frame
=
image.new(
'rgba'
, im.size)
'''
is this file a "partial"-mode gif where frames update a region of a different size to the entire image?
if so, we need to construct the new frame by pasting it on top of the preceding frames.
'''
if
mode
=
=
'partial'
:
new_frame.paste(last_frame)
new_frame.paste(im, (
0
,
0
), im.convert(
'rgba'
))
new_frame.save(
'%s-%d.png'
%
('
'.join(os.path.basename(path).split('
.
')[:-1]), i), '
png')
i
+
=
1
last_frame
=
new_frame
im.seek(im.tell()
+
1
)
except
eoferror:
pass
def
main():
processimage(
'test_gif.gif'
)
if
__name__
=
=
"__main__"
:
main()
|
解析结果如下,由此可见改动态图实际上是由14张相同分辨率的静态图组合而成 。
2、gif动态图的合成 。
gif图像的合成,使用imageio库(https://pypi.python.org/pypi/imageio) 。
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#-*- coding: utf-8 -*-
import
imageio
def
create_gif(image_list, gif_name):
frames
=
[]
for
image_name
in
image_list:
frames.append(imageio.imread(image_name))
# save them as frames into a gif
imageio.mimsave(gif_name, frames,
'gif'
, duration
=
0.1
)
return
def
main():
image_list
=
[
'test_gif-0.png'
,
'test_gif-2.png'
,
'test_gif-4.png'
,
'test_gif-6.png'
,
'test_gif-8.png'
,
'test_gif-10.png'
]
gif_name
=
'created_gif.gif'
create_gif(image_list, gif_name)
if
__name__
=
=
"__main__"
:
main()
|
这里,使用第一步解析出来的图像中的8幅图,间副的间隔时间为0.1s,合成新的gif动态图如下:
希望本文所述对大家python程序设计有所帮助.
原文链接:https://blog.csdn.net/guduruyu/article/details/77540445 。
最后此篇关于Python图像处理之gif动态图的解析与合成操作详解的文章就讲到这里了,如果你想了解更多关于Python图像处理之gif动态图的解析与合成操作详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
小问题,我是 JavaScript 的新手,我无疑会从这个项目中学到很多东西。所以我提出一个问题(这很可能是一个愚蠢的问题),我的问题是: 我计划构建一个 Web 应用程序,它可以从 Raphael
我一直在尝试使用 Plotly 执行可视化,但我的问题是我需要它是动态的。意思是如果我有代码: import plotly.express as px data = [1, 5, 4, 7, 5, 2
请帮助..我想制作一个android应用程序,我从数据库中获取值并需要以图形、饼图、条形图等格式显示它们。最好的方法是什么?我能得到一些此类应用程序的示例代码吗? 最佳答案 这里有一些很棒的建议:ht
我是一名优秀的程序员,十分优秀!