使用ImageMagick反转颜色


27

如何使用ImageMagick convert工具反转图像的颜色,以使黑色变为白色而白色变为黑色?

换句话说,我想把这个变成:

原版的

到这个:

倒

Answers:


45

使用-negate选项:

convert input.png -channel RGB -negate output.png

-negate选项将每个像素替换为其互补色。从-channel RGBImageMagick 7开始,该选项是必需的,以防止否定Alpha通道(如果存在)。(感谢@yoya的见解!)

又见文档-negate


5
这使我的黑白png完全透明...
–onlygusti

这对我
有用

2
透明性问题是因为alpha通道也被反转了。使用-channel RGB -negate避免这种情况。
goto-bus-stop,

1
那很有意思。我的系统(版本6.8.9)上的ImageMagick仅否定RGB通道,默认情况下不取消alpha通道,因此-channel RGB没有必要。如果我通过,它只会反转alpha通道-channel RGBA -negate。我不确定是什么解释了不同的行为。
Jo Liss '18

它对我有效,无一例外。我很好奇的是:虽然identify将输入视为“ 8位sRGB”,但输出却是“ 8位灰度灰度”。
user74094 '18

3

ImageMagick 6.x只能使用-negate选项反转颜色强度。ref)https://www.imagemagick.org/script/command-line-options.php#negate

convert input.png -negate output.png

ImageMagick 7.x需要带有-negate的-channel选项。ref)https://imagemagick.org/script/porting.php#cli更改的选项

convert input.png -channel RGB -negate output.png

这是因为默认的活动通道在ImageMagick 7.x中包含透明度(不透明/ alpha)

ImageMagick6: DefaultChannels = ((AllChannels | SyncChannels) &~ OpacityChannel)
ImageMagick7: DefaultChannels = AllChannels

大多数算法会更新红色,绿色,蓝色,黑色(对于CMYK)和alpha通道。-negate的可用性似乎为整体一致性而牺牲。

为您提供更多细节。http://blog.awm.jp/2018/11/18/im7negate/


1
convert input.png -negate output.png在ImageMagick 7.0.8(ArchLinux)上对我工作正常
msrd0

没有透明度的RGB图像没有问题。具有透明图像的RGBA会导致问题,仅ImageMagick7。
yoya

您可以检查PNG文件是否透明。identify -verbose input.png | grep Type 输出TrueColor或TrueColorAlpha。
yoya

好答案,谢谢!我继续并添加-channel RGB到答案中。
Jo Liss
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.