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

分享于 

4分钟阅读

电脑

  繁體 雙語

问题:

使用 GraphicsMagick,用透明替换一种颜色是相当容易的。


gm convert -transparent magenta src.png dst.png



不幸的是我找不到一个简单的方法来。 如果我有一个带有alpha通道透明度的图像文件,如何在恒定颜色背景下组合它,然后丢弃现在多余的alpha通道? 背景颜色应该会影响部分透明的像素以及完全透明的像素。

我已经发现了+matte选项,但是它会丢弃 比如 层- 通常使用-background选项来指定背景颜色。

目前我管理的唯一方法是使用多个调用,一个用于生成纯色 rectangle 图像文件。 这似乎疯狂- 当然,它应该是一个相当简单的调用?

我目前使用 GraphicsMagick,但没有承诺- 我将 switch,如果它使事情变得更容易。

编辑

当我说"背景颜色应该会影响部分透明的像素以及完全透明的像素。"时,我的意思是,我通常会将一个透明的子弹传输到实际颜色背景。 应该混合部分透明像素。

如果 reversed process background背景颜色 key transparency original original original original original original original original original background background background background background background background background background background transparency transparency transparency。 这并不是大多数人想要的原因。 这是我想要的,因为我不会将背景转换为透明度。如果需要原始透明度,我还会有原始图像。


回答 1:

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

gm convert -background color -extent 0x0 +matte src.png dst.png

或者对于 ImageMagick

convert src.png -background color -mosaic +matte dst.png

回答 2:

你所搜索的几乎符合-opaque的描述但扭曲了。 假设一个固定颜色背景,下面的命令可能适用于你( 我只有ImageMagick来测试)。

gm convert -channel matte -threshold 0% -channel RGB -fill [your background color] -opaque transparent -channel matte -threshold 100% src.png dst.png

-channel matte -threshold 0% 将像素设置为透明,以完全透明, -channel RGB -fill [your background color] -opaque transparent 将完全透明的像素替换为给定的填充颜色,并且 -channel matte -threshold 100% 删除所有像素的透明度。


回答 3:

它看起来像你只想把透明( 部分或者部分) 图像复合在背景上,使用alpha混合。 此页建议代码:


composite smile.gif rose: rose-over.png



在给定的例子中,它将一个图像融合到另一个图像上。

现在,如果想将图像与透明背景色混合在一起,可以使用背景( 如果是 static ),或者在运行时创建基本的单色/。 如何这样做取决于你是使用 shell 还是某种脚本( Perl,PHP等)。



rep  图像  COL  Using  repl  替换  
相关文章