你能在 gif 中显示一些动画循环后的静态图像吗?

Can you show a static image after some animation loops in a gif?

我有一个 gif 动画,我想循环播放 n 次 (animation.gif)。循环后,我想显示静态图像 (static.gif)。动画将在网络上显示,所以文件大小需要尽可能小。

我尝试通过添加具有零延迟的静态图像来使用 Imagemagick 实现它...

convert -loop 3 animated.gif -delay 0 static.gif newanim.gif

虽然最后显示的是静态图片,但问题是每次迭代后 static.gif 都会显示一秒钟。

我尝试的另一件事是添加动画 3 次,最后添加静态图像。这非常有效,但文件会变得太大,尤其是当动画很长且循环多次时。例如,一个 6.1mb 的动画变成 ~18mb。

convert -loop 1 animated.gif animated.gif animated.gif static.gif newanim.gif

我在 linux 环境中使用 Python 来实现这一点,所以如果有编程方式来代替 Imagemagick 也可以。

编辑:我没有提到一个约束:它需要在没有任何客户端编程的情况下工作(Javascript、CSS 等)。它需要是一个纯粹的 gif 解决方案。此约束使其不同于 How to stop an animated gif from looping

不,你不能。 GIF 动画格式不提供该功能。

有多种方法可以在网页上执行您想要的操作,但您需要为静态图像创建一个单独的文件,并且您需要一些代码(例如 JavaScript,或也许 CSS) 在所需的动画循环次数后显示静态图像。

我很确定您生成的 gif 大小的问题出在您使用的工具中。我已经创建了这些示例,一个带有动画,另一个带有重复 2 次的动画,并且两者的大小相同。自己查一下:

我用过 ScreenToGif,它是超级越野车,只能在 Windows 上工作,但可以打开现有的 gif 或图像列表进行编辑。

如果您需要 Linux 的解决方案,请查看 FFmpeg,但我自己并没有使用它。