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.