将两个透明 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 合并为图层的主要内容,如果未能解决你的问题,请参考以下文章

mx51 IPU 透明处理

Python中使用tkinter创建透明图层不规则组件插入GIF动图等功能实现

PS制作gif动图以及背景透明与消除残影

请问这张雪碧图用PS怎么弄,谢谢

arcgis区调透明度后不显示区颜色

将透明 PNG 保存为透明 GIF