Inverter cores com o ImageMagick


27

Como inverter as cores de uma imagem usando a convertferramenta ImageMagick , para que o preto fique branco e o branco fique preto?

Em outras palavras, quero transformar isso:

original

nisso:

invertido

Respostas:


45

Use a -negateopção:

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

A -negateopção substitui cada pixel por sua cor complementar. A -channel RGBopção é necessária no ImageMagick 7 para impedir que o canal alfa (se presente) seja negado. (Obrigado a @yoya por esse insight!)

Veja também a documentação para -negate.


5
isso fez meu png preto e branco completamente transparente ...
— theonlygusti

Isso funcionou para mim #
— 628 shadi

2
O problema da transparência é porque o canal alfa também é invertido. Use -channel RGB -negatepara evitar isso.
— goto-bus-stop

11
Isso é interessante. O ImageMagick no meu sistema (versão 6.8.9) nega apenas os canais RGB, e não o canal alfa por padrão, portanto, -channel RGBnão é necessário. Só inverte o canal alfa se eu passar -channel RGBA -negate. Não sei ao certo o que explica o comportamento diferente.
— Jo Liss

Funciona para mim, sem negar. No entanto, o que estou curioso é: enquanto identifyvê a entrada como "sRGB de 8 bits", a saída é "Cinza de escala de cinza de 8 bits".
— user74094

3

O ImageMagick 6.x pode inverter intensidades de cores apenas com a opção -negate. ref) https://www.imagemagick.org/script/command-line-options.php#negate

convert input.png -negate output.png

O ImageMagick 7.x requer a opção -channel com -negate. ref) https://imagemagick.org/script/porting.php#cli Opções alteradas

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

Isso ocorre porque os canais ativos padrão contêm transparência (opaco / alfa) no ImageMagick 7.x

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

A maioria dos algoritmos atualiza os canais vermelho, verde, azul, preto (para CMYK) e alfa. A usabilidade de -negate parece ser sacrificada pela consistência geral.

Mais detalhes para você. http://blog.awm.jp/2018/11/18/im7negate/


11
convert input.png -negate output.pngfunciona bem para mim no ImageMagick 7.0.8 (ArchLinux)
— msrd0

Não há problema na imagem RGB sem transparência. RGBA com imagem de transparência causa problema, apenas ImageMagick7.
— yoya

Você pode verificar se o arquivo PNG tem transparência ou não. identify -verbose input.png | grep Type Ele gera TrueColor ou TrueColorAlpha.
— yoya

Ótima resposta, obrigado! Fui em frente e acrescentei -channel RGBa minha resposta.
— Jo Liss
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.