将两个透明 gif 合并为图层

Merging two transparent gifs as layers

我在 imagemagick 论坛上找到了这个页面:Merging 2 gifs, one is animated and transparent which links to the imagemagick docs on Animation Modification;具体来说,这里的例子:

  convert canvas_prev.gif -coalesce \
          -gravity NorthEast  -draw 'image over 5,5 0,0 "rose:"' \
          -layers Optimize   draw_over.gif

这是我的尝试。我有这两个 gif(我可能感觉有点病态)。第一个中的白色实际上是透明的。

当我运行

convert eyes.gif -coalesce -draw ' image over 0,0 0,0 "trump.gif" ' combine.gif

我明白了:

这不是我想要的完整效果。王牌动画根本不再播放。

我想看到更多类似的东西(这是在 Phaser JS 中创建的,但这让我无法将结果导出为新图像,只能手动录制截屏视频):

一种方法,但不确定它是否是最好的,如下所示:

  1. 将两个动画转换为相同尺寸的精灵sheet
  2. 将一张图片粘贴到另一张图片上
  3. 将结果剪切成更小的帧并将其转换为动画 GIF

命令应如下所示:

montage -background none t.gif -tile x1@ -geometry +0+0 tt.png
montage e.gif[0-16,0-9] -tile x1@ -geometry +0+0 ee.png
magick convert -delay 10 -loop 0 ee.png tt.png -coalesce -flatten \
        -crop 150x150 +repage output.gif

棘手的部分是带有眼睛图像的第二行。它只有 17 帧,而头骨有 27 帧。因此必须调整 sprite sheet 大小。

我工作了,但是我对此不太满意,因为解决方案需要手动输入一些参数(帧选择和输出图像尺寸)。