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

Jo Liss
fonte

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.

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

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