Comment puis-je convertir un dossier de .pngs en .jpgs tout en définissant la couleur d'arrière-plan?

10

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

J'apprécierais toute aide.

Étant donné que jpgs ne prend pas en charge la transparence, comment puis-je spécifier la valeur hexadécimale de la couleur d'arrière-plan du jpg de sortie? En ce moment, c'est par défaut #ffffff? J'ai essayé ce script, mais il donne au fond de sortie jpgs un fond blanc:

mogrify -quality 100 -format jpg *.png

Mettre à jour

J'ai créé ces fichiers png dans Inkscape. Je dois mentionner que mon objectif en convertissant ces pngs en jpgs est de se débarrasser des bords dentelés sur les objets circulaires ou angulaires. 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 donne aux images des bords encore plus irréguliers. Existe-t-il un moyen de convertir les pngs en jpg et d'utiliser également l'anti-aliasing ou peut-être une autre technique pour se débarrasser des bords irréguliers? Merci pour l'aide.

James
la source
3
Il est assez difficile de répondre à votre question si elle change tout le temps ... Pour référence future: Essayez d'inclure ce que vous voulez réaliser dans votre question depuis le début. Concernant votre "mise à jour 2": le "jaggedness" est-il simplement le résultat de la résolution que vous avez choisie? Et si vous augmentez la résolution (le numéro DPI dans la boîte de dialogue "Exporter le bitmap ...")?
Marcel Stimberg

Réponses:

3

Pour lisser les bords, vous pouvez créer des fichiers PNG 10x plus grands que votre taille cible, puis redimensionner avec l'anticrénelage en JPG. J'ai fait cela en utilisant Python et la bibliothèque d'imagerie Python à bon escient, mais je ne sais pas comment le faire en utilisant d'autres outils.

brousch
la source
28

Le format JPEG ne prend pas en charge la transparence. Par conséquent, le maintien des arrière-plans transparents n'est pas possible 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 le JPEG 2000 prend en charge la transparence, mais il est beaucoup moins courant que le format JPEG. Cela dépend de votre cas d'utilisation s'il s'agit d'une alternative viable.

Marcel Stimberg
la source
Je me trompe peut-être, mais l'OP demande de définir la couleur des zones transparentes. Ils sont rendus blancs, mais l'OP pourrait utiliser du bleu, par exemple.
nanofarad
16

À votre deuxième question:

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

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

L'utilisation -backgroundfournit des résultats similaires. N'oubliez pas le -opaque none.

Christian Skjødt
la source
Hé, merci pour l'aide. Existe-t-il un moyen d'antialiaser le jpeg de sortie via cette commande? Voir la mise à jour 2 ci-dessus pour un contexte supplémentaire. Merci.
James
4

Je suis désolé, il n'y a aucun moyen, le jpegformat ne supporte pas un alpha channeldonc vous ne pouvez pas avoir de transparence.

M. Shunz
la source
0

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

Lie Ryan
la source