阻止 gif 图像在 matplotlib 中重复

Posted

技术标签:

【中文标题】阻止 gif 图像在 matplotlib 中重复【英文标题】:Stop gif image from repeating in matplotlib 【发布时间】:2016-05-08 18:31:38 【问题描述】:

我搜索了其他类似的问题,但这并没有解决我的问题。下面是一个简单的代码,在matplotlib中以gif图像的形式生成动画:

import numpy as np
import matplotlib.pylab as plt
import matplotlib.animation as anm

fig = plt.figure()
def draw(i):
    x = np.linspace(0, 5, num = 1000)    
    y = np.sin(x-i*0.1)
    plt.clf()
    plt.plot(x, y, 'r-') 

anim = anm.FuncAnimation(fig, draw, frames = 10, interval = 500, repeat = False)
anim.save('test.gif', fps = 1, writer = 'imagemagick')

这会生成我想要的动画,但是一旦我打开最终图像(使用 eog),它就会不断重复。由于我将在演示文稿中展示动画,因此我希望它在展示一次后停止。如您所见,我在 FuncAnimation 中添加了repeat = False,但这并没有停止重复图像。我的代码有什么问题?

提前致谢

【问题讨论】:

这没有很好的记录 - 但请尝试将 extra_args=['-loop','1'] 添加到对 save 的调用中,例如anim.save('test.gif', fps = 1, writer = 'imagemagick',extra_args=['-loop','1'])。如果可行,我会将其添加为完整答案,但目前我不确定,也没有imagemagick 可以检查。 extra_args 直接传递给图像编码器。 没有。不幸的是,它不起作用。 你能让它产生一些调试输出来找到它正在运行的 ImageMagick 命令吗?它可能包含单词convert。或者,您可以运行它同时尝试while :; do ps -aef | grep "convert" | grep "test.gif"; done 也许您可以将文件作为 PNG 文件写入磁盘,然后自己使用 ImageMagick 和 convert frame*png -loop 1 animation.gif @SnehalShekatkar Arggh - 在源代码中找到了必要的行,看起来他们对-loop 0 进行了硬编码:请参阅this line 我认为这可能是一个错误,因为该工具无论如何都将其默认为零。我认为正因为如此,任何用户指定的-loop 都将被忽略。我认为你必须按照@marksetchell 输出帧并手动转换,如果你不希望它循环:( 【参考方案1】:

我对这个问题的解决方案是从 imagemagick 变成枕头作为作家。

尝试以下方法:

from matplotlib.animation import FuncAnimation, PillowWriter

anim = FuncAnimation(fig, update, frames=range(1, 51), interval=.001, repeat=False)
anim.save('test.gif', dpi=80, writer=PillowWriter(fps=5))

在我看来,图像的质量比使用 imagemagick 的要差一些,但它是一个更简单、更快捷的解决方案。

【讨论】:

以上是关于阻止 gif 图像在 matplotlib 中重复的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 matplotlib 将 3D numpy 数组可视化为 GIF? [关闭]

网络中的 Matplotlib 图像属性(Django)

在不使用 UIWebview 的情况下显示 gif 图像 [重复]

Matplotlib:从远程服务器获取base64图像[重复]

在 PHP 中阻止图像主机的隐写术?

将画布导出为 .gif 图像 [重复]