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

Jo Liss
fuente

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.

Jo Liss
fuente
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/

yoya
fuente
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