Como posso converter uma pasta de .pngs para .jpgs enquanto configuro a cor do plano de fundo?

10

Eu tenho uma pasta de arquivos png que possuem fundos transparentes. Gostaria de convertê-los na linha de comando e manter os fundos transparentes das imagens.

Eu apreciaria qualquer ajuda.

Como os jpgs não suportam transparência, como posso especificar o valor hexadecimal da cor de fundo do jpg de saída? No momento, o padrão é #ffffff? Eu tentei esse script, mas ele fornece os jpgs de saída em fundo branco:

mogrify -quality 100 -format jpg *.png

Atualizar

Eu criei esses arquivos png no inkscape. Devo mencionar que meu objetivo na conversão desses pngs em jpgs é livrar-se de bordas irregulares em objetos circulares ou angulares. Os pngs atualmente têm bordas irregulares e li que convertê-los em jpgs pode resolver esse problema. Contudo, a conversão através do método descrito na resposta de Christian Skjødt dá às imagens bordas irregulares ainda piores. Existe uma maneira de converter os pngs em jpg e também usar anti-aliasing ou talvez outra técnica para se livrar das bordas irregulares? Obrigado pela ajuda.

James
fonte
3
É muito difícil responder à sua pergunta, se ela mudar o tempo todo ... Para referência futura: tente incluir o que deseja alcançar na sua pergunta desde o início. Re sua "atualização 2": A "irregularidade" é simplesmente o resultado da resolução escolhida? E se você aumentar a resolução (o número de DPI na caixa de diálogo "Exportar bitmap ...")?
Marcel Stimberg

Respostas:

3

Para suavizar as bordas, você pode criar os PNGs 10x maiores que o tamanho desejado e redimensionar com suavização de borda para JPG. Fiz isso usando o Python e a Python Imaging Library com bons resultados, mas não sei como fazê-lo usando outras ferramentas.

brousch
fonte
28

O formato JPEG não suporta transparência - portanto, manter os fundos transparentes não é possível se você quiser (ou precisar) usar o formato JPEG. Consulte a Wikipedia para obter uma visão geral dos recursos de diferentes formatos de imagem.

Observe que o JPEG 2000 realmente suporta transparência, mas é muito menos comum que o formato JPEG. Depende do seu caso de uso se essa é uma alternativa viável.

Marcel Stimberg
fonte
Posso estar errado, mas o OP está perguntando sobre como definir a cor de qualquer área transparente. Eles estão sendo tornados brancos, mas o OP poderia usar azul, por exemplo.
Nanofarad
16

Para sua segunda pergunta:

Para especificar a cor de fundo ao converter suas imagens, você pode usar a -fillopção:

mogrify -quality 100 -format jpg -fill "#FF0000" -opaque none *.png

Usar -backgroundfornece resultados semelhantes. Não esqueça o -opaque none.

Christian Skjødt
fonte
Ei, obrigado pela ajuda. Existe alguma maneira que eu possa antialias a saída JPEG através deste comando? Consulte a atualização 2 acima para obter contexto adicional. Obrigado.
James
4

Sinto muito, não há como, o jpegformato não suporta um, alpha channelentão você não pode ter transparência.

Shunz
fonte
0

dependendo do que você está tentando fazer com a imagem, pode ser possível colocar o canal alfa em uma imagem em escala de cinza ou em uma máscara de bits, e o programa que estiver usando a imagem aplicará a imagem auxiliar como valores translúcidos / transparentes . Embora seja melhor modificar o programa para que ele suporte alfa png.

Lie Ryan
fonte