Pergunta

Eu tenho algumas imagens PNG com transparência e preciso criar versões com a camada de imagem composta em um fundo branco. Eu tentei várias coisas com as operações da imagem Magick "converter", mas nada acontece ou recebo um erro. Não quero ir a um formulário JPG intermediário porque não quero os artefatos. Claro que é fácil fazer isso no GIMP ou no Photoshop ou o que for, mas eu realmente prefiro rotriá -lo da linha de comando, porque existem muitas dessas coisas.

Um exemplo de um comando de magick de imagem que não trabalha é:

convert img1.png -background white -flatten img1-white.png

Isso resulta em um erro.

Obrigado!

Foi útil?

Solução

Isso funciona para mim:

convert -flatten img1.png img1-white.png

Referências de documentação:

Outras dicas

-background white -alpha remove -alpha off

Exemplo:

convert image.png -background white -alpha remove -alpha off white.png

Sinta -se à vontade para substituir white com qualquer outra cor que você quiser. A documentação da ImageMagick diz isso sobre o -alpha remove Operação:

Esta operação é simples e rápida e faz o trabalho sem precisar de uso extra de memória ou outros efeitos colaterais que podem estar associados a técnicas alternativas de remoção de transparência. É, portanto, a maneira preferida de remover a transparência da imagem.

A imagem achatada e a aplicação da imagem de fundo é direta no ImageMagick

No entanto, a ordem dos comandos é muito importante

Para aplicar qualquer plano de fundo em uma imagem transparente e achatá -la, primeiro aplique o plano de fundo do que achate -a. O inverso não funciona.

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png

O único que funcionou para mim foi uma mistura de todas as respostas:

convert in.png -background white -alpha remove -flatten -alpha off out.png

Usar -flatten me deixou completamente louco porque -flute em combinação com a colheita e o redimensionamento da Mogrify simplesmente não funciona. O funcionário e para mim a única maneira correta é "remover" o canal alfa.

-Alpha Remover -Alpha Off (não é necessário com JPG)

Veja documentação: http://www.imagemagick.org/usage/masking/#remove

Veja como substituir a mesma imagem em todas as pastas em um diretório com branco em vez de transparente:

mogrify -background white -flatten */*.png

o Alfa remover Seção do Guia de uso da ImageMagick sugere usar o -alpha remove opção, por exemplo:

convert in.png  -background white  -alpha remove  out.png

... usando o -background cor da sua escolha.

O guia afirma:

Esta operação é simples e rápida e faz o trabalho sem precisar de uso extra de memória ou outros efeitos colaterais que podem estar associados a técnicas alternativas de remoção de transparência. É, portanto, a maneira preferida de remover a transparência da imagem.

Além disso, adiciona a nota:

Observe que, embora a transparência seja 'removida', o canal alfa permanecerá ativado, mas agora estará totalmente opaco. Se você não precisar mais do canal alfa, poderá usar o Alpha para desativá -lo.

Assim, se você não precisar do canal alfa, pode diminuir o tamanho da sua imagem de saída, adicionando o -alpha off opção, por exemplo:

convert in.png  -background white  -alpha remove  -alpha off  out.png

Existem mais detalhes sobre outras técnicas frequentemente usadas para remover a transparência descrita no Removendo a transparência das imagens seção.

Incluído nessa seção está mencionado uma ressalva importante ao uso de -flatten Como técnica para remover a transparência:

No entanto, isso não funcionará com "Mogrify" ou com uma sequência de várias imagens, basicamente porque o operador "-flatten" foi realmente projetado para mesclar várias imagens em uma única imagem.

Então, se você estiver convertendo várias imagens de uma só vez, por exemplo, gerando miniaturas a partir de um arquivo PDF, -flatten Não fará o que você deseja (ele achatará todas as imagens para todas as páginas em uma imagem). Por outro lado, usando o -alpha remove A técnica ainda produzirá várias imagens, cada uma com a transparência removida.

Parece que seu comando está correto, portanto o problema pode ser devido à falta de suporte para PNG (). Você pode verificar com convert -list configure Ou apenas tente o seguinte:

sudo yum install libpng libpng-devel

Esta não é exatamente a resposta para sua pergunta, mas encontrei sua pergunta enquanto tentava descobrir como remover o canal alfa, então decidi adicionar esta resposta aqui:

Se você deseja remover o canal alfa usando o ImageMagick, você pode usar este comando:

mogrify -alpha off ./*.png

WELP Parece que minha decisão instalar "Graphics Magick" sobre "Image Magick" tem algumas arestas - quando reinstalo genuíno "Image Magick" genuíno, o comando acima funciona perfeitamente bem.

editar, muito tempo depois - um dia desses vou verificar se "Graphics Magick" corrigiu esse problema.

Eu também precisava: ambos -alpha background e -flatten, ou -fill.

Fiz um novo PNG com um fundo transparente e um ponto vermelho no meio.

convert image.png -background green -alpha off green.png Falha: produziu uma imagem com fundo preto

convert image.png -background green -alpha background -flatten green.png produziu uma imagem com o fundo verde correto.

Claro, com outro arquivo que renomeei image.png, não conseguiu fazer nada. Para esse arquivo, descobri que a cor dos pixels transparentes era "#d5d5d5", então enchei essa cor com verde:

convert image.png -fill green -opaque "#d5d5d5" green.png substituiu os pixels transparentes pelo verde correto.

Isso cria uma imagem apenas colocando o 1º com transparência no topo do 2º

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

Originalmente encontrou a dica sobre esta postagem

Para realmente remover o canal alfa do arquivo, use o Alpha Off opção:

convert in.png -background white -alpha off out.png

Eu vi essa pergunta e respostas que realmente me ajudam, mas então eu precisava fazer isso em muitos arquivos, então, caso você tenha várias imagens (imagens PNG) em uma pasta e você deseja fazer isso para todos:

find ./ -name "*.png" -exec convert {} -flatten {} \;

É -Alfa desligado, não -Alpha Remover! O upload da loja de aplicativos iOS falha quando há um canal alfa em qualquer ícone !!

Veja como fazer: Mogrify -Alpha off *.png

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top