Votre meilleur pari serait d'utiliser ImageMagick.
Je ne suis pas un expert de l'utilisation réelle, mais je sais que vous pouvez pratiquement tout faire en matière d'image avec cela !
Un exemple est :
convert image.png image.jpg
qui conservera l'original ainsi que la création de l'image convertie.
En ce qui concerne la conversion par lots, je pense que vous devez utiliser l'outil Mogrify qui fait partie d'ImageMagick.
Gardez à l'esprit que cela écrase les anciennes images.
La commande est :
mogrify -format jpg *.png
J'ai quelques solutions supplémentaires.
La solution la plus simple est comme la plupart déjà postée. Une simple boucle for bash.
for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done
Pour une raison quelconque, j'ai tendance à éviter les boucles dans bash, voici donc une approche xargs plus unixy, utilisant bash pour la modification des noms.
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'
Celui que j'utilise. Il utilise GNU Parallel pour exécuter plusieurs tâches à la fois, ce qui vous donne une amélioration des performances. Il est installé par défaut sur de nombreux systèmes et se trouve presque définitivement dans votre dépôt (c'est un bon programme à avoir sous la main).
ls -1 *.png | parallel convert '{}' '{.}.jpg'
Le nombre de tâches par défaut correspond au nombre de cœurs de processeur dont vous disposez. J'ai trouvé une meilleure utilisation du processeur en utilisant 3 tâches sur mon système double cœur.
ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'
Et si vous voulez des statistiques (une ETA, des travaux terminés, un temps moyen par travail...)
ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'
Il existe également une syntaxe alternative si vous utilisez GNU Parallel.
parallel convert '{}' '{.}.jpg' ::: *.png
Et une syntaxe similaire pour certaines autres versions (y compris debian).
parallel convert '{}' '{.}.jpg' -- *.png
Le convert
La commande trouvée sur de nombreuses distributions Linux est installée dans le cadre de la suite ImageMagick. Voici le code bash pour exécuter convert
sur tous les fichiers PNG d'un répertoire et évitez ce problème de double extension :
for img in *.png; do
filename=${img%.*}
convert "$filename.png" "$filename.jpg"
done