Converter imagem em escala de cinza em imagem de canal alfa no shell unix


14

Eu tenho uma imagem em escala de cinza. Quero convertê-lo em um PNG transparente, para que os pixels pretos (na imagem original) fiquem totalmente opacos, os pixels brancos se tornem totalmente transparentes, um pixel cinza de 50% se torne 50% transparente e assim por diante em todas as tonalidades entre.

Como posso conseguir isso?

(Sim, eu sei que essa é quase a mesma pergunta que a conversão de tons de cinza em canal alfa , mas quero saber como fazer isso usando apenas ferramentas de linha de comando - por exemplo, ImageMagick ou NetPBM.)

Aqui está um exemplo de resultado da pergunta acima mencionada. Este exemplo é um resultado que eu gostaria de alcançar usando apenas ferramentas de linha de comando.

Amostra

Se você abrir esse PNG em um visualizador compatível com transparência, verá o que quero dizer.

Respostas:


18

Ooookay. Depois de pesquisar bastante e ler mais do manual ImageMagick do que realmente me importo, aqui está a resposta. Como você tem uma imagem em escala de cinza source.png, aqui estão meus comandos.

Para tornar transparente os pixels pretos e manter os pixels brancos como estão, execute este comando:

 convert source.png -alpha copy -fx '#fff' result.png

Para tornar os pixels brancos transparentes , mantendo o preto como está, use:

 convert source.png -alpha copy -channel alpha -negate +channel -fx '#000' result.png

Vamos explicar esse último comando um pouco mais detalhadamente:

  • convert - É o comando ImageMagic (um dos vários)
  • source.png - A imagem de origem em escala de cinza.
  • -alpha copy - Copie o conteúdo do arquivo anterior para o canal alfa.
  • -channel alpha - Especifique que os seguintes operadores devem afetar apenas o canal alfa.
  • -negate- Inverta o canal alfa (por causa do anterior -chanel alphanão afetará nenhuma outra parte da imagem).
  • +channel- Especifique que os seguintes operadores apenas devem afetar os canais de cores e não modificar mais o canal alfa. (Esse é o padrão e, portanto, não precisamos fornecê-lo no primeiro exemplo mais simples.)
  • -fx '#000'- Substitua o conteúdo do canal colorido por pixels pretos. (Por causa do +channelcanal alfa não será afetado).

É muito importante incluir essa -fxopção final , caso contrário, todos os pixels semitransparentes na imagem gerada manterão as cores. (Como esses pixels são semitransparentes, pode não ser óbvio, mas o resultado final não é o que se espera).

Achei a lista de opções do ImageMagick bastante útil.


explicação muito boa para alcançar meu objetivo, quando estou usando o segundo comando que torna minha imagem mais escura que a imagem em escala de cinza real. Na verdade, meu objetivo é obter o mesmo tom de cor que existe em escala de cinza que não seja a transparência esperada. alguma idéia para conseguir isso?
Hardik Patel

isso é muito útil, obrigado! :) contente por não ter que descobrir por mim mesmo #
33155

Eu te amo!!!!!!
Mescarra

Esses tipos de comentários são, provavelmente, melhor enviar-me através deste canal: okcupid.com/profile/zrajm :)
zrajm

1
não sei por que, mas com a versão atual (ImageMagick 7.0.7-21), só consigo uma imagem em branco / preto sólida, sem nenhum canal alfa. Copiei a linha de comando literalmente, alterando apenas os caminhos dos arquivos de entrada / saída. Talvez eles tenham feito algumas mudanças incompatíveis com versões anteriores.
Exibir nome

0

Com o ImageMagick 7.0, a resposta acima não funciona mais. Mas você pode usar:

converter source.png -canal rgb -fx '#fff' result.png

Aka, preencha os canais RGB com espaço em branco e deixe o alfa como antes.


Eu suspeito que você perdeu a 'cópia alfa' :)
Chris

0

Com o imagemagick 7, acho que é necessário especificar -channel RGBantes do -fx, caso contrário, você obtém uma imagem em preto sólido, da seguinte forma:

convert input.png -alpha copy -channel RGB -fx '#000' out.png

E negar é útil se você deseja que o preto seja opaco e o branco seja transparente:

convert input.png -negate -alpha copy -channel RGB -fx '#000' out.png
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.