Odwróć kolory za pomocą ImageMagick

27

Jak odwrócić kolory obrazu za pomocą convertnarzędzia ImageMagick , aby czerń stała się biała, a biel stała się czarna?

Innymi słowy, chcę to zmienić:

oryginalny

zaangażowany w to:

odwrotny

Jo Liss
źródło

Odpowiedzi:

45

Użyj -negateopcji:

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

-negateOpcja zastępuje każdy piksel z jego kolor uzupełniający. Ta -channel RGBopcja jest niezbędna od ImageMagick 7, aby zapobiec zanegowaniu kanału alfa (jeśli jest obecny). (Dzięki @yoya za ten wgląd!)

Zobacz także dokumentację dotyczącą -negate.

Jo Liss
źródło
5
dzięki temu moje czarno-białe png było całkowicie przezroczyste ...
theonlygusti
To zadziałało dla mnie
shadi
2
Problem z przezroczystością polega na tym, że kanał alfa jest również odwrócony. Użyj, -channel RGB -negateaby tego uniknąć.
przystanek autobusowy
1
To interesujące. ImageMagick w moim systemie (wersja 6.8.9) neguje tylko kanały RGB, a nie domyślnie kanał alfa, więc -channel RGBnie jest to konieczne. Odwraca kanał alfa tylko wtedy, gdy przejdę -channel RGBA -negate. Nie jestem pewien, co tłumaczy inne zachowanie.
Jo Liss
Działa dla mnie bez negacji. Interesuje mnie jednak: chociaż identifywidzi wejście jako „8-bitowy sRGB”, wyjście to „8-bitowy Skala Szarości”.
user74094,
3

ImageMagick 6.x może odwracać intensywność kolorów tylko z opcją -negate. ref) https://www.imagemagick.org/script/command-line-options.php#negate

convert input.png -negate output.png

ImageMagick 7.x wymaga opcji -channel z opcją -negate. ref) https://imagemagick.org/script/porting.php#cli Zmienione opcje

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

Wynika to z tego, że domyślne aktywne kanały zawierają przezroczystość (nieprzezroczyste / alfa) w ImageMagick 7.x

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

Większość algorytmów aktualizuje kanały czerwony, zielony, niebieski, czarny (dla CMYK) i alfa. Wydaje się, że użyteczność -negate została poświęcona dla ogólnej spójności.

Więcej szczegółów dla Ciebie. http://blog.awm.jp/2018/11/18/im7negate/

yoya
źródło
1
convert input.png -negate output.pngdziała dobrze dla mnie na ImageMagick 7.0.8 (ArchLinux)
msrd0
Bez przezroczystości nie ma problemu z obrazem RGB. Problem z RGBA z przezroczystym obrazem, tylko ImageMagick7.
yoya
Możesz sprawdzić, czy plik PNG ma przezroczystość, czy nie. identify -verbose input.png | grep Type Wypisuje TrueColor lub TrueColorAlpha.
yoya
Świetna odpowiedź, dzięki! Poszedłem dalej i dodałem -channel RGBdo swojej odpowiedzi.
Jo Liss