如何将PNG条带转换为GIF?

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

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

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

示例输出

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

您可以使用ImageMagick以不同的方式转换图像,它应该能够很容易地实现。 首先,你可以分成几个部分( original.png是源图像,在这种情况下是32×32像素):

 convert original.png -crop 32x32 parts-%02d.png 

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

 convert -loop 0 -page +0+0 ./parts*.png output.gif 

导致:

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

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

 convert output.gif -fuzz 10% -layers Optimize optimised.gif 

或使用gifsicle

 gifsicle -O output.gif -o optimised.gif 

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


上面的例子没有page选项,所以它清楚地显示

这个问题是你可能无法对结果图像进行大量优化 – 所以另一种方法可能是使帧不透明,以便下一帧覆盖前一帧。