211 votes

Conversion par lots de PNG en JPG sous linux

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.

8voto

Teddy Points 6368

L'actuel " png2jpg "que vous recherchez est en réalité divisée en deux commandes appelées pngtopnm y cjpeg et ils font partie de la netpbm y libjpeg-progs respectivement.

png2pnm foo.png | cjpeg > foo.jpeg

5voto

Hrissan Points 126

Ma solution rapide for i in $(ls | grep .png); do convert $i $(echo $i.jpg | sed s/.png//g); done

2 votes

Ceci doit être l'une des lignes de commande les plus laides et les plus compliquées que j'ai jamais vues.

1 votes

@evilsoup honnêtement, c'est élégant pour Shell Shell. Prétendre que c'est alambiqué n'est pas juste.

8 votes

@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é.

4voto

user7023624 Points 196

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

3voto

Jeffrey Aylesworth Points 2358

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.

1voto

LordMarkus Points 301

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

SistemesEz.com

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.

Powered by:

X