将两个透明 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 中创建的,但这让我无法将结果导出为新图像,只能手动录制截屏视频):
一种方法,但不确定它是否是最好的,如下所示:
- 将两个动画转换为相同尺寸的精灵sheet
- 将一张图片粘贴到另一张图片上
- 将结果剪切成更小的帧并将其转换为动画 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 大小。
我工作了,但是我对此不太满意,因为解决方案需要手动输入一些参数(帧选择和输出图像尺寸)。
我在 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 中创建的,但这让我无法将结果导出为新图像,只能手动录制截屏视频):
一种方法,但不确定它是否是最好的,如下所示:
- 将两个动画转换为相同尺寸的精灵sheet
- 将一张图片粘贴到另一张图片上
- 将结果剪切成更小的帧并将其转换为动画 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 大小。
我工作了,但是我对此不太满意,因为解决方案需要手动输入一些参数(帧选择和输出图像尺寸)。