GraphicsMagick / ImageMagick替换所有非透明像素(类似于Photoshop的颜色叠加)

4
我正在尝试使用Node的GraphicsMagick将所有非透明像素替换为给定颜色。

使用复合图像不是一个选项,我只需要将每个非透明像素更改为给定的颜色。

原始图片:

Original image

目标:

enter image description here

透明像素应该保持透明。我正在尝试实现Photoshop的Color Overlay效果:

enter image description here

2个回答

7

这个比较简单。在ImageMagick中按照以下步骤进行操作:

convert 84xHk.png -fill "#E91FCB" +opaque none result.png

enter image description here


程序在使用ImageMagick时运行完美-但是希望使用GraphicsMagick执行此操作,然而相同的命令(gm convert 84xHk.png -fill "#E91FCB" +opaque none result.png)会产生以下输出:gm convert: Unable to open file (none) [No such file or directory]. - Adriaan Meuris
抱歉,我不熟悉GraphicsMagick。它是Imagemagick的早期分支,可能没有所有相同的功能或使用不同的名称来表示这些功能。我的猜测是它不理解“+opaque”。您可能需要使用emcconville的其中一种方法。 - fmw42

2
我不熟悉 Node 的 GraphicsMagick 库,但有几种方法可以实现这一目标。以下是我能想到的一些方法...
提取 alpha 通道并替换颜色。
convert 84xHk.png -alpha extract \
        -negate -fill '#E91FCB' -fuzz 50% \
        -opaque black output.png

第一个示例

创建纯色图像,并复制 Alpha 通道

convert 84xHk.png \
       \( +clone -alpha off \
          -fill '#E91FCB' \
          -draw 'color 0,0 reset' \
       \) +swap -compose CopyOpacity -composite output.png

第二个例子

使用FX表达式

 convert 84xHk.png -fx 'p.a==1?#E91FCBFF:#E91FCB00' output.png

Third Example


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接