Suponha que você tenha qualquer imagem (PNG ou JPG). Esta imagem tem um fundo branco e preciso torná-lo transparente.
Eu tentei com estes exemplos:
convert original.png -background none transparent.png
convert original.png -background white -flatten -alpha off transparent.png
mas sem resultados desejáveis.
Como posso fazer isso?
IMPORTANTE: Usando a convert
linha de comando.
png
imagemagick
alpha-transparency
Israel
fonte
fonte
convert original.png -transparent white new.png
mas ao tentar, não consigo fazê-lo funcionar. Como um aparte, você tem certeza de que o fundo é realmente branco (#FFFFFF) ou é apenas quase branco (por exemplo, #FEFEFE)?Respostas:
Estou usando o ImageMagick 6.6.9-7 no Ubuntu 12.04.
O que funcionou para mim foi o seguinte:
Isso mudou todo o branco no test.png para transparente.
fonte
Eu tive o mesmo problema. No qual eu tenho que remover o fundo branco do formato de imagem jpg / png usando ImageMagick.
O que funcionou para mim foi:
1) Converta o formato da imagem para png:
convert input.jpg input.png
2)
convert input.png -fuzz 2% -transparent white output.png
fonte
mogrify -format png -median 2 -fuzz 5% -transparent white ico_*.jpg
Solução
Explicação
Isso é um pouco mais longo do que as respostas simples fornecidas anteriormente, mas dá resultados muito melhores: (1) A qualidade é superior devido ao alfa suavizado e (2) apenas o fundo é removido, em oposição a uma única cor. ("Plano de fundo" é definido como aproximadamente da mesma cor do pixel superior esquerdo, usando um preenchimento das bordas da imagem.)
Além disso, o canal alfa também é corroído em meio pixel para evitar halos. Claro, as operações morfológicas do ImageMagick (ainda?) Não funcionam no nível de subpixel, então você pode ver que estou aumentando o canal alfa para 200% antes de erodir.
Comparação de resultados
Aqui está uma comparação da abordagem simples ("-fuzz 2% -transparent white") com a minha solução, quando executada no logotipo do ImageMagick . Eu aplainei as duas imagens transparentes em um fundo marrom escuro para tornar as diferenças aparentes (clique para ver os originais).
Observe como a barba do Mago desapareceu na abordagem simples. Compare as bordas do Assistente para ver como o alfa suavizado ajuda a figura a se mesclar suavemente com o fundo.
Claro, eu admito completamente que às vezes você pode querer usar a solução mais simples. (Por exemplo: é muito mais fácil de lembrar e, se você estiver convertendo para GIF, estará limitado a alfa de 1 bit de qualquer forma.)
script shell mktrans
Como é improvável que você queira digitar esse comando repetidamente, recomendo envolvê-lo em um script. Você pode baixar um script de shell BASH do github que executa minha solução sugerida. Ele pode ser executado em vários arquivos em um diretório e inclui comentários úteis caso você queira ajustar as coisas.
script bg_removal
A propósito, o ImageMagick na verdade vem com um script chamado "bg_removal" que usa o floodfill de maneira semelhante à minha solução. No entanto, os resultados não são bons porque ele ainda usa alfa de 1 bit. Além disso, o script bg_removal executa mais devagar e é um pouco mais complicado de usar (requer que você especifique dois valores difusos diferentes). Aqui está um exemplo da saída de bg_removal.
fonte
gimp
ou algo assim. :)Isso funciona para mim:
onde quanto menor a% de penugem, mais próximo do branco verdadeiro ou, inversamente, quanto maior a%, mais variação do branco pode se tornar transparente
fonte
mktrans
script de shell: github.com/hackerb9/mktransVocê pode usar isto para tornar o fundo transparente
O acima mostra o fundo transparente do prefeito
fonte
()
:convert more-icon.png -gravity center -background 'rgba(0,0,0,0)' -extent 27x27 new-more-icon.png
Usando o ImageMagick, isso é muito semelhante ao código e ao resultado do hackerb9, mas é uma linha de comando um pouco mais simples. Ele assume que o pixel superior esquerdo é a cor de fundo. Eu apenas pingo o fundo com transparência, então seleciono o canal alfa, desfoco-o e removo metade da área desfocada usando -level 50x100%. Em seguida, ligue novamente todos os canais e alise-os contra a cor marrom. O -blur 0x1 -level 50x100% atua para suavizar os limites da transparência do canal alfa. Você pode ajustar o valor de fuzz, a quantidade de desfoque e o valor -level 50% para alterar o grau de suavização.
fonte
Se você deseja controlar o nível de transparência, pode usar rgba. onde a é o alfa. 0 para transparente e 1 para opaco. Certifique-se de que o arquivo de saída final deve ter extensão .png para transparência.
fonte
Sim. Tive esse mesmo problema também. Este é o comando que executei e funcionou perfeitamente:
convert transparent-img1.png transparent-img2.png transparent-img3.png -channel Alpha favicon.ico
fonte