ImageMagick - 将图像的白色转换为另一种颜色,保持透明度并排除黑色

ImageMagick - convert an image's white colors to another, keeping transparency and excluding black

我有一大堆图片。默认值是白色,应该修改为特定的十六进制代码,图像中存在的任何黑色都保持不变(因为它表示符号)。白色通常是部分透明的,如果是的话应该保留。任何完全透明的区域都应该保持透明。

我正在使用 Powershell 进行批处理 -- $ColorHex 指的是数组中的十六进制值。生成的文件应该与生成的颜色匹配。

Original Image Example

Green (#009900) - colorize 70%

magick ".\FFFFFF.png" -fuzz 5% -fill "#$ColorHex" -opaque "#FFFFFF" -colorize 70% "$ColorHex.png"

Green (#009900) - fuzz 75% -opaque

magick convert ".\FFFFFF.png" -fuzz 75% -fill "#$ColorHex" -opaque "#FFFFFF" "$ColorHex.png"

通常这是我想要的,但在转换为绿色时不保留白色的部分透明度并且在黑色边缘处粗糙(希望它被锯齿)。

我有大量图像要以这种方式处理,非常感谢任何帮助。

也许这就是您在 Imagemagick 7 中想要的。在这里,我制作了图像的内存副本。然后我关闭 alpha 并处理所有纯白色。然后我从内存副本中提取 alpha 通道并将其放回生成的绿色图像上。

输入:

Unix 语法:

magick nCijg.png +write mpr:img \
-alpha off -fill "#009900" -opaque "#FFFFFF" \
\( mpr:img -alpha extract \) \
-alpha off -compose copy_opacity -composite \
result.png

Windows 语法:

magick nCijg.png +write mpr:img ^
-alpha off -fill "#009900" -opaque "#FFFFFF" ^
( mpr:img -alpha extract ) ^
-alpha off -compose copy_opacity -composite ^
result.png

结果:

如果你想包含非白色来填充白色中的一些小孔,你可以包含一些绒毛。