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

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.


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/


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.