怎么把PNG带转换成GIF?


12

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

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

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

示例输出

同样,为了使事情更加清晰,该程序称为“ Game Maker 8.0”。

Answers:


16

您可以使用ImageMagick来以各种方式转换图像,并且它应该能够很容易地做到这一点。首先,您可以分为几部分(original.png作为源图像,在这种情况下为32x32像素):

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

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

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

导致:

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

您可以包括多种其他选项(主要在第二个命令中),例如-delayetc等-您还可以优化动画,使其更小(加载/渲染更快)-例如,从此处借用

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

或使用gifsicle

gifsicle -O output.gif -o optimised.gif

编辑:如果框架是透明的,则可以通过添加
-dispose Background选项来设置要替换的框架,以便在加载下一个框架时将其丢弃:


上面的示例没有page选项,因此显示清晰

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


图像具有透明度,基本上只是在前一帧上绘制下一帧,有什么办法可以使它在空白上绘制下一帧?
user245115 2015年

从源图像中删除透明度是最简单的方法。但是可以使用更多参数来完成。
david6

@ user245115-替换框架而不是覆盖-参见编辑。
Wilf
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.