Como posso converter uma pasta de .pngs em .jpgs enquanto defino a cor de fundo?

9

Eu tenho uma pasta de arquivos png que têm fundos transparentes. Eu gostaria de convertê-los a partir da linha de comando e manter fundos transparentes das imagens.

Eu gostaria de receber ajuda.

Como os jpgs não suportam transparência, como posso especificar o valor hexadecimal da cor de fundo do output jpg? No momento, o padrão é #ffffff ? Eu tentei este script, mas dá a saída jpgs fundos brancos:

mogrify -quality 100 -format jpg *.png

Atualizar

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

    
por James 26.08.2011 / 10:32

5 respostas

3

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

    
por brousch 27.08.2011 / 00:51
28

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

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

    
por Marcel Stimberg 26.08.2011 / 10:55
15

Para sua segunda pergunta:

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

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

O uso de -background fornece resultados semelhantes. Não esqueça o -opaque none .

    
por Christian Skjødt 26.08.2011 / 11:51
4

Sinto muito, não há como, jpeg format não suporta alpha channel , então você não pode ter transparência.

    
por Mr Shunz 26.08.2011 / 10:58
0

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

    
por Lie Ryan 26.08.2011 / 12:47