阻止 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? [关闭]
在不使用 UIWebview 的情况下显示 gif 图像 [重复]