如何将 PNG 条带转换为 GIF?

use*_*115 12 convert image-processing

所以,我在程序中制作了这个动画,但是,它似乎不支持导出为 PNG 序列,因此我可以将其转换为 GIF。动画超过 100 帧,因此一张一张地保存每个图像需要很长时间。但是,它支持导出为“条带”,就像电影胶片一样。动画中的每张图片都具有相同的尺寸。以下是该程序的“条带”功能的工作原理。

动画中的图像水平堆叠,第一帧在最左边,最后一帧在最右边。帧之间没有间隙,如果动画有X帧,文件名通常是“name_stripX.png”。如果每帧是 32 x 32 并且动画有 8 帧,则此文件的宽度为 256,高度为 32。

这是一些示例输出,每种颜色填充一帧:

示例输出

此外,为了让事情更清楚一点,该程序被称为“Game Maker 8.0”。

Wil*_*ilf 16

您可以使用ImageMagick以不同的方式转换图像,它应该能够很容易地做到这一点。首先,您可以分成几部分(original.png作为源图像,在本例中为 32x32 像素):

convert original.png -crop 32x32 parts-%02d.png
Run Code Online (Sandbox Code Playgroud)

然后您可以将其转换为动画(-loop 1如果您不想循环播放,请使用):

convert -loop 0 -page +0+0 ./parts*.png output.gif
Run Code Online (Sandbox Code Playgroud)

导致:

第一个命令的输出 PNG 包含一个偏移量,因此如果没有该-page +0+0选项,动画最终会像:

您可以包含其他不同的选项(主要在第二个命令中),例如-delay等 - 您还可以优化动画使其更小(加载/渲染速度更快) - 例如从这里借用

convert output.gif -fuzz 10% -layers Optimize optimised.gif
Run Code Online (Sandbox Code Playgroud)

或使用gifsicle

gifsicle -O output.gif -o optimised.gif
Run Code Online (Sandbox Code Playgroud)

编辑:如果框架是透明的,您可以通过添加
-dispose Background选项来设置要替换的框架,因此当加载下一个框架时处理一个框架:


上面的示例在没有page选项的情况下完成,因此可以清楚地显示

这样做的问题是您可能无法优化生成的图像 - 所以另一种方法可能是使帧不透明,以便下一帧覆盖前一帧。