Invertieren Sie Farben mit ImageMagick

27

Wie invertiere ich die Farben eines Bildes mit dem ImageMagick- convertWerkzeug, sodass Schwarz zu Weiß und Weiß zu Schwarz wird?

Mit anderen Worten, ich möchte das umdrehen:

Original

das mögen:

invertiert

Jo Liss
quelle

Antworten:

45

Verwenden Sie die -negateOption:

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

Die -negateOption ersetzt jedes Pixel durch seine Komplementärfarbe. Die -channel RGBOption ist ab ImageMagick 7 erforderlich, um zu verhindern, dass der Alphakanal (falls vorhanden) negiert wird. (Danke an @yoya für diesen Einblick!)

Siehe auch die Dokumentation zu -negate.

Jo Liss
quelle
5
dies machte meine schwarz-weiß-png völlig transparent ...
theonlygusti
Dies funktionierte für mich
shadi
2
Das Transparenzproblem besteht darin, dass der Alpha-Kanal ebenfalls invertiert ist. Verwenden Sie -channel RGB -negate, um das zu vermeiden.
Goto-Bus-Haltestelle
1
Das ist interessant. Der ImageMagick auf meinem System (Version 6.8.9) negiert standardmäßig nur die RGB-Kanäle und nicht den Alpha-Kanal, -channel RGBist also nicht erforderlich. Es invertiert nur den Alpha-Kanal, wenn ich übergebe -channel RGBA -negate. Ich bin nicht sicher, was das unterschiedliche Verhalten erklärt.
Jo Liss
Es funktioniert bei mir, ohne zu negieren. Was mich allerdings interessiert ist: Während identifydie Eingabe "8-Bit-sRGB" ist, ist die Ausgabe "8-Bit-Graustufen-Grau".
user74094
3

ImageMagick 6.x kann Farbintensitäten nur mit der Option -negate invertieren. ref) https://www.imagemagick.org/script/command-line-options.php#negate

convert input.png -negate output.png

ImageMagick 7.x benötigt die Option -channel mit -negate. ref) https://imagemagick.org/script/porting.php#cli Geänderte Optionen

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

Dies liegt daran, dass die standardmäßig aktiven Kanäle in ImageMagick 7.x Transparenz (opak / alpha) enthalten

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

Die meisten Algorithmen aktualisieren die Kanäle Rot, Grün, Blau, Schwarz (für CMYK) und Alpha. Die Verwendbarkeit von -negate scheint aus Gründen der Gesamtkonsistenz geopfert zu werden.

Mehr Details für Sie. http://blog.awm.jp/2018/11/18/im7negate/

yoya
quelle
1
convert input.png -negate output.pngFunktioniert gut für mich auf ImageMagick 7.0.8 (ArchLinux)
msrd0
Bei RGB-Bildern ohne Transparenz gibt es keine Probleme. RGBA mit Transparenzbild verursachen Problem, nur ImageMagick7.
yoya
Sie können prüfen, ob die PNG-Datei transparent ist oder nicht. identify -verbose input.png | grep Type Es gibt TrueColor oder TrueColorAlpha aus.
yoya
Tolle Antwort, danke! Ich ging voran und fügte -channel RGBmeiner Antwort hinzu.
Jo Liss