将精灵表转换为gif动画

时间:2019-05-08 11:42:15

标签: imagemagick animated-gif graphicsmagick sprite-sheet

帧从左到右,从上到下,动画顺序播放,所有帧的大小相同。

1234
5612
345

我需要一个命令,该命令将帧大小,第一帧的坐标和帧数作为输入,并提供动画gif作为输出。最好不要生成中间文件。

我可以使用编程语言来做到这一点,但是没有办法像ImageMagick或GraphicsMagick这样的命令行工具来简化它吗?在我看来,这应该是一项常见的任务,但是我只发现了有关如何将gif转换为sprite工作表的问题,而没有找到其他问题。

2 个答案:

答案 0 :(得分:3)

使用ImageMagick,您可以使用-crop WxH +adjoin +repage提取每个帧子图像,然后将这些帧动画化。

例如,给定一个300x289子图像的子画面,如下所示...

sprite

convert sprite.png -crop 300x289 +adjoin +repage -adjoin -loop 0 -delay 1 output.gif

output

有关其他示例,请参见Animation BasicsAnimation Modifications

答案 1 :(得分:1)

如果您在外壳中为单个子画面的宽度和高度,起始子画面的X和Y偏移量以及要使用的子画面数设置变量,则类似ImageMagick的命令将从中提取所需的子画面表格并将其转换为GIF动画。

这是Windows CMD语法...

set WIDE=100
set HIGH=100

set XCOORD=100
set YCOORD=300

set FRAMES=5

convert spritesheet.png ^
   -set option:distort:viewport %[fx:%FRAMES%*%WIDE%]x%HIGH% ^
   -set option:slider %[fx:%YCOORD%*(w/%WIDE%)+%XCOORD%] ^
   -crop %WIDE%x%HIGH% +append +repage ^
   -distort affine "%[slider],0 0,0" ^
   -crop %WIDE%x%HIGH% +repage ^
   -set delay 50 -loop 0 result.gif

变量%WIDE%和%HIGH%是单个精灵的尺寸。

变量%XCOORD%和%YCOORD%是您需要的第一个精灵从图纸的左侧和顶部的偏移量。

变量%FRAMES%是要提取的子画面总数。

该命令从阅读输入表开始。它使用输入图像尺寸和您提供的变量来定义IM的某些设置,以供以后使用。首先是隔离所需数量的精灵所需的视口尺寸。其次,它计算将工作表裁剪为单个精灵并附加到一个水平行之后的第一个精灵将在 之后的偏移量。

接下来,将图片“ -crop”为单独的精灵,并将其“ +追加”为单个水平行。

然后,它使用“ -distort affine”将整个精灵行向左滑动所需的距离–“%[slider]”,如果需要,将其移出视口,并缩小视口以仅显示适当数量的精灵。

之后,它将图像再次裁剪为单独的精灵,设置动画的延迟,然后写入输出GIF。

对于Windows BAT脚本,您需要将IM变量和FX表达式上的百分号“ %%”加倍,而不是像%WIDE%这样的shell变量。

对于* nix shell或脚本,您需要设置这些变量并以不同的方式访问它们。另外,您还需要将反斜线“ ^”替换为反斜杠“ \”。

对于ImageMagick版本7,使用“ magick”而不是“ convert”启动命令。

在编写输出GIF之前,您需要设置所需的处理方法,延迟以及可能的“ -loop 0”。

相关问题