将两个透明 gif 合并为图层
Posted
技术标签:
【中文标题】将两个透明 gif 合并为图层【英文标题】:Merging two transparent gifs as layers 【发布时间】:2017-08-31 21:14:36 【问题描述】:我在 imagemagick 论坛上找到了这个页面:Merging 2 gifs, one is animated and transparent,它链接到Animation Modification 上的 imagemagick 文档;具体来说,这里的例子:
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】:一种方法,但不确定它是否是最好的,如下:
-
将两个动画转换为相同尺寸的精灵表
将一张图片粘贴到另一张图片上
将结果剪切成更小的帧并将其转换为动画 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 帧。因此必须调整精灵表大小。
我可以工作,但是我对此不太满意,因为解决方案需要手动输入一些参数(帧选择和输出图像尺寸)。
【讨论】:
我可以通过编程方式获取来自this question 的代码的帧数,并且我会知道尺寸,所以这应该可以用于我的应用程序。尽管您认为可能有更好的方法,但我会暂时不接受答案。以上是关于将两个透明 gif 合并为图层的主要内容,如果未能解决你的问题,请参考以下文章