web-dev-qa-db-fra.com

Comment convertir un dossier de .pngs en .jpgs lors de la définition de la couleur d'arrière-plan?

J'ai un dossier de fichiers png qui ont des arrière-plans transparents. Je voudrais les convertir à partir de la ligne de commande et conserver les fonds transparents des images.

J'apprécierais toute aide.

Comme les jpgs ne supportent pas la transparence, comment puis-je spécifier la valeur hexadécimale de la couleur d'arrière-plan de jpg en sortie? À l'heure actuelle, la valeur par défaut est #ffffff? J'ai essayé ce script, mais il donne à la sortie des fonds blancs jpgs:

mogrify -quality 100 -format jpg *.png

Mise à jour

J'ai créé ces fichiers png dans Inkscape. Je dois mentionner que mon objectif en convertissant ces pngs en jpgs est de supprimer les bords irréguliers d'objets circulaires ou angular. Les pngs ont actuellement des bords irréguliers et j'ai lu que les convertir en jpgs pourrait résoudre ce problème. Cependant, la conversion via la méthode décrite dans la réponse de Christian Skjødt confère aux images des contours encore plus dégradés. Existe-t-il un moyen de convertir les pngs en jpg et d’utiliser également l’anti-aliasing ou une autre technique permettant de supprimer les bords irréguliers? Merci pour l'aide.

10
James

Pour lisser les bords, vous pouvez créer des PNG 10 fois plus grands que votre taille cible, puis les redimensionner avec anti-aliasing au format JPG. C'est ce que j'ai fait avec Python et la Python Imaging Library, mais je ne suis pas sûr de savoir comment le faire à l'aide d'autres outils.

3
brousch

Le format JPEG ne prend pas en charge la transparence. Par conséquent, il n'est pas possible de conserver les fonds transparents si vous souhaitez (ou devez utiliser) le format JPEG. Voir Wikipedia pour un aperçu des capacités des différents formats d'image.

Notez que JPEG 20 prend en charge la transparence, mais il est beaucoup moins répandu que le format JPEG. Cela dépend de votre cas d'utilisation s'il s'agit d'une alternative viable.

28
Marcel Stimberg

À votre deuxième question:

Pour spécifier la couleur d'arrière-plan lors de la conversion de vos images, vous pouvez utiliser l'option -fill:

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

Utiliser -background fournit des résultats similaires. N'oubliez pas le -opaque none.

16
Christian Skjødt

Je suis désolé, il n'y a aucun moyen, le format jpeg ne prend pas en charge un alpha channel, vous ne pouvez donc pas utiliser la transparence. .

4
Mr Shunz

en fonction de ce que vous essayez de faire avec l'image, il peut être possible de placer le canal alpha sur une image en niveaux de gris ou un masque binaire séparé, et le programme utilisant l'image appliquerait l'image auxiliaire en tant que valeurs translucides/transparentes. . Bien qu’il soit finalement préférable de modifier le programme pour qu’il prenne en charge le format alpha png.

0
Lie Ryan