Invierta colores con ImageMagick


27

¿Cómo invierto los colores de una imagen con la convertherramienta ImageMagick para que el negro se vuelva blanco y el blanco se vuelva negro?

En otras palabras, quiero convertir esto:

original

dentro de esto:

invertido

Respuestas:


45

Usa la -negateopción:

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

La -negateopción reemplaza cada píxel con su color complementario. La -channel RGBopción es necesaria a partir de ImageMagick 7 para evitar que se niegue el canal alfa (si está presente). (¡Gracias a @yoya por esta información!)

Consulte también la documentación de -negate.


55
esto hizo que mi png en blanco y negro fuera completamente transparente ...
theonlygusti

Esto funcionó para mí
shadi

2
El problema de la transparencia se debe a que el canal alfa también está invertido. Use -channel RGB -negatepara evitar eso.
goto-bus-stop

1
Eso es interesante. ImageMagick en mi sistema (versión 6.8.9) solo niega los canales RGB, y no el canal alfa por defecto, por -channel RGBlo que no es necesario. Solo invierte el canal alfa si paso -channel RGBA -negate. No estoy seguro de qué explica el comportamiento diferente.
Jo Liss

Funciona para mí, sin negar. Sin embargo, lo que tengo curiosidad es que: mientras identifyve la entrada como "sRGB de 8 bits", la salida es "Gris de escala de grises de 8 bits".
user74094

3

ImageMagick 6.x puede invertir intensidades de color solo con la opción -negate. ref) https://www.imagemagick.org/script/command-line-options.php#negate

convert input.png -negate output.png

ImageMagick 7.x requiere la opción -channel con -negate. ref) https://imagemagick.org/script/porting.php#cli Opciones modificadas

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

Esto se debe a que los canales activos predeterminados contienen transparencia (opaca / alfa) en ImageMagick 7.x

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

La mayoría de los algoritmos actualizan los canales rojo, verde, azul, negro (para CMYK) y alfa. La usabilidad de -negate parece ser sacrificada por la consistencia general.

Más detalles para ti. http://blog.awm.jp/2018/11/18/im7negate/


1
convert input.png -negate output.pngfunciona bien para mí en ImageMagick 7.0.8 (ArchLinux)
msrd0

No hay problema en la imagen RGB sin transparencia. RGBA con imagen de transparencia causa problemas, solo ImageMagick7.
yoya

Puede verificar que el archivo PNG tenga transparencia o no. identify -verbose input.png | grep Type Supera TrueColor o TrueColorAlpha.
Yoya

Gran respuesta, gracias! Seguí adelante y agregué -channel RGBa mi respuesta.
Jo Liss
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.