Quelqu'un connaît-il un bon moyen de convertir par lots un tas de PNG en JPG sous Linux ? (J'utilise Ubuntu).
Un binaire png2jpg que je pourrais simplement déposer dans un Shell Shell serait idéal.
Quelqu'un connaît-il un bon moyen de convertir par lots un tas de PNG en JPG sous Linux ? (J'utilise Ubuntu).
Un binaire png2jpg que je pourrais simplement déposer dans un Shell Shell serait idéal.
Ceci doit être l'une des lignes de commande les plus laides et les plus compliquées que j'ai jamais vues.
@evilsoup honnêtement, c'est élégant pour Shell Shell. Prétendre que c'est alambiqué n'est pas juste.
@MaxHowell man. Non. Voici une version élégante de ceci : for f in ./*.png; do convert "$f" "${f%.*}.jpg"; done
. Cela évite le complètement inutile ls
, grep
y sed
appels (et echo
mais il s'agit d'un buildin bash qui n'aura pas ou très peu d'impact sur les performances), et se débarrasse de deux pipes et de deux subshells, et implique moins de saisie. Elle est même légèrement plus portable, puisque toutes les versions de ls
peuvent être analysés en toute sécurité.
Plusieurs années trop tard, il y a un png2jpeg spécifiquement dans ce but, dont je suis l'auteur.
Adaptation du code de @Marcin :
#!/bin/sh
for img in *.png
do
filename=${img%.*}
png2jpeg -q 95 -o "$filename.jpg" "$filename.png"
done
Pour le traitement par lots :
for img in *.png; do
convert "$img" "$img.jpg"
done
Mais vous vous retrouverez avec des noms de fichiers comme image1.png.jpg.
Cela fonctionnera dans bash, et peut-être bourne. Je ne sais pas pour les autres shells, mais la seule différence serait probablement la syntaxe de la boucle.
C'est ce que j'utilise pour convertir lorsque les fichiers couvrent plus d'un répertoire. L'original était TGA vers PNG
find . -name "*.tga" -type f | sed 's/\.tga$//' | xargs -I% convert %.tga %.png
Le concept est que vous find
les fichiers dont vous avez besoin, enlevez l'extension puis ajoutez-la à nouveau avec xargs
. Ainsi, pour convertir un PNG en JPG, il faut changer les extensions et faire une chose supplémentaire pour gérer les canaux alpha, à savoir définir le fond (dans cet exemple, blanc, mais vous pouvez le changer), puis aplatir l'image.
find . -name "*.png" -type f | sed 's/\.png$//' | xargs -I% convert %.png -background white -flatten %.jpg
SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.