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

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.


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/


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.