使用 GraphicsMagick 或 ImageMagick,如何用填充颜色替换透明度?

Ste*_*314 8 graphics imagemagick

使用 GraphicsMagick,用透明度替换一种颜色相当容易......

gm convert -transparent magenta src.png dst.png
Run Code Online (Sandbox Code Playgroud)

不幸的是,我想不出一个简单的方法来做完全相反的事情。如果我有一个具有 alpha 通道透明度的图像文件,我如何在恒定颜色的背景上合成它然后丢弃现在多余的 alpha 通道?背景颜色应影响部分透明和完全透明的像素。

我发现了 +matte 选项,但它实际上丢弃了 alpha 层 - 通常在透明度所在的位置留下垃圾颜色像素,而不是例如使用 -background 选项来指定要使用的背景颜色。

到目前为止,我管理此问题的唯一方法是使用多个调用 - 一个生成纯色矩形图像文件,另一个将原始图像与纯色图像合成,第三个调用丢弃 alpha 通道。这看起来很疯狂——当然可以通过一个相当简单的调用来实现吗?

我目前使用 GraphicsMagick,但没有承诺 - 如果它使事情变得更容易,我会切换到 ImageMagick。

编辑

当我说“背景颜色应该影响部分透明和完全透明的像素。”时,我的意思是结果应该是我通常期望的将透明精灵块传输到纯色背景上的结果。应该混合部分透明的像素。

这意味着,如果我随后反转该过程 - 将背景颜色键转换为透明度 - 我希望在原始图像周围看到一个光晕,其中背景颜色混合到像素中,因此颜色键不完全匹配,因此不会转换回透明度。出于这个原因,这不是大多数人想要的。不过,这正是我想要的,因为我不会将背景转换回透明度 - 如果需要,我仍然会拥有原始透明度的原始图像。

kat*_*ate 9

使用 GraphicsMagick,应该能够替换您流程中的前两个步骤(对于 ImageMagick,它会代替)。我不确定第三步,但听起来你只是在前两步的图像上运行,所以最后的调用看起来像这样:-background color -extent 0x0-mosaic-extent+matte

gm convert -background color -extent 0x0 +matte src.png dst.png
Run Code Online (Sandbox Code Playgroud)

或者对于 ImageMagick,

convert src.png -background color -mosaic +matte dst.png
Run Code Online (Sandbox Code Playgroud)