0

我有大量带有透明背景的白色图像,我想让它们变成带有透明背景的黑色。使用 GIMP 或 BIMP 很简单,但是对于成千上万的图像,命令行似乎是一种更好的方法。在 ImageMagick 中,我发现以下两个命令可以满足我的要求:

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate *.png
mogrify -alpha set -channel RGBA -transparent white *.png

但是,我宁愿不通过两次。我尝试将它们组合成多种不同的方式:

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate +repage -transparent white *.png

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate -alpha set -channel RGBA -transparent white *.png

mogrify -alpha set -channel RGBA -background black -flatten +repage -negate +repage -alpha set -channel RGBA -transparent white *.png

以及相同想法的其他几种排列方式。所有这些都会导致纯黑色图像。我错过了什么?

有没有更简单的方法来反转黑白或至少将白色转换为黑色,但不影响 alpha 层?

mogrify -negate *.png 

将白色转换为透明,将透明转换为白色,并且

mogrify -fill black -opaque white *.png

留下凌乱的白色边缘。

4

3 回答 3

0

在 ImageMagick 中,尝试

mogrify -alpha off -negate -alpha on *.png

这会关闭 Alpha 通道,反转黑白,然后打开原始 Alpha 通道。

作为测试,我做了

convert aircon.png -alpha off -negate -alpha on aircon_fred.png

在此处输入图像描述

你的两个 mogrify 命令的等价物是

mogrify -background black -alpha background -alpha off -negate -transparent white *.png

我不得不将您的 -flatten 替换为等效项,因为之后需要将 compose 方法重置为 over 以使 -transparent 正常工作。但是 mogrify 不接受 -compose over。

作为一个简单的测试,我做了

convert aircon.png -background black -flatten -negate -transparent white aircon_fred2.png

在此处输入图像描述

与第一种类似的另一种方法只是使整个底层图像变黑并保留 alpha 通道。

mogrify -alpha off -fill black -opaque white -alpha on *.png

再次作为测试,我做了

convert aircon.png -alpha off -fill black -opaque white -alpha on aircon_fred3.png

在此处输入图像描述

但是,我的第一种方法应该提供更好的抗锯齿,因为它保留了原始的 Alpha 通道。您的方法将通过 -transparent white 重新创建 alpha,并将具有更多阶梯式混叠。

于 2017-07-22T03:08:52.017 回答
0

也许您想要的是 ImageMagick 中的以下内容。只是猜测,直到我可以看到您的实际输入文件。

mogrify -format png -alpha off -negate -alpha on *.png
于 2017-07-20T05:02:22.783 回答
0

在 ImageMagick 中,您可以:

mogrify -format png -fill "rgba(0,0,0,1)" -opaque "rgba(255,255,255,1)" *.png

如果你的白色不是完美的白色,那么添加 -fuzz XX%

mogrify -format png -fuzz 5% -fill "rgba(0,0,0,1)" -opaque "rgba(255,255,255,1)" *.png

问题是您需要在颜色中指定 alpha 值,因为您的图像具有透明度。因此使用 rgba(r,g,b,a) 值(注意 a)或使用带有 #RRGGBBAA 的十六进制值

如果使用 IM 7,则 mogrify 将替换为 magick mogrify

这是使用转换的示例。我在徽标的其他地方创建了一个透明的白色图像:图像。

http://www.fmwconcepts.com/misc_tests/transparency_invert/logot.png

然后跑了

convert logot.png -fill "rgba(0,0,0,1)" -opaque "rgba(255,255,255,1)" logot_invert.png

它在输入为白色的地方返回黑色并保持透明度不变。

http://www.fmwconcepts.com/misc_tests/transparency_invert/logot_invert.png

这不是你想要的吗?

于 2017-07-18T22:15:09.157 回答