使用imagemagick的动画gif中的多种透明颜色?

Posted

技术标签:

【中文标题】使用imagemagick的动画gif中的多种透明颜色?【英文标题】:multiple transparent colors in animated gif with imagemagick? 【发布时间】:2021-09-11 00:58:11 【问题描述】:

正在寻找一种方法来使用 imagemagick 使动画 gif 中的多种颜色(在本例中为 4,但将来是任意颜色)透明。我知道我可以使用多个 -transparent 命令,但是当动画 gif 被合成时,它会导致一些奇怪的合成,之前的帧保持渲染而不是清除画布。如果只将一种颜色设为透明,则不会发生这种情况。

例如,这是原始图像:

animated gif 1

这是我的代码的结果。

converted animated gif

4 种背景颜色已成功透明化,但现在与透明区域直接接触的动画部分在每一帧后都不会被清除。

这是我的脚本:

/usr/local/bin/convert 'https://radblast.wunderground.com/cgi-bin/radar/WUNIDS_map?num=40&type=N0Q&mapx=400&mapy=240&brand=wui&delay=15&frame=0&scale=1&transx=0&transy=0&severe=0&smooth=0&centerx=400&centery=240&station=GRK&rainsnow=0&lightning=0&noclutter=0&showlabels=1&showstorms=0&rand=27081615' -transparent '#87876F' -transparent '#6C6C58' -transparent '#1C3575' -transparent '#162A5D' ~/Desktop/radar.gif

【问题讨论】:

【参考方案1】:

这在 ImageMagick 中适用于我。您需要指定 -dispose 背景。

convert -dispose background anim.gif -transparent '#87876F' -transparent '#6C6C58' -transparent '#1C3575' -transparent '#162A5D' x.gif

【讨论】:

太棒了。谢谢!我还没有完全解决所有的 -dispose 选项,但这似乎可以解决问题。 嗯...但现在正如我在您的示例中看到的那样,它将每一帧裁剪到前一帧的差异范围内。这很奇怪。我想知道是否有办法避免这种行为? 抱歉,我忽略了这一点。我尝试了几件事,包括 -coalesce,但这没有帮助。我认为你应该在 Imagemagick GIT 论坛的github.com/ImageMagick/ImageMagick/issues 的问题部分发布这个问题 别担心,我真的想通了!见下文。 -coalesce 使用适当的优化在最后重新组合帧。总的来说,感谢您在 ImageMagick 上所做的所有工作。 干得好。我做了 -coalesce 但使用 -layers 优化,这不起作用。搞清楚 -layers 优化框架的工作做得很好。【参考方案2】:

好的,这就是最终奏效的方法;使用 -coalesce 将动画分割成单独的帧并重新组合它们。

convert ~/Desktop/radar.gif -coalesce -transparent '#87876F' -transparent '#6C6C58' -transparent '#1C3575' -transparent '#162A5D' -layers OptimizeFrame ~/Desktop/radar.gif

【讨论】:

以上是关于使用imagemagick的动画gif中的多种透明颜色?的主要内容,如果未能解决你的问题,请参考以下文章

使用 ImageMagick 创建的动画 gif 具有故障块颜色背景

带有 ImageMagick 和许多图像的 GIF 动画

imagemagick - 具有静态黑色背景的动画?

如何使用 ImageMagick (php) 调整动画 gif 的大小?

调整 GIF 动画、pil/imagemagick、python 的大小

Imagemagick:如何减小具有大静态区域的动画 GIF 的大小?