web-dev-qa-db-fra.com

Comment puis-je convertir toutes les images d'un répertoire en jpg?

J'ai tellement d'images différentes dans un répertoire avec des noms séquentiels 1 2 3 4 ... Je me demandais s'il était possible de toutes les convertir en jpg et de les redimensionner toutes en 900x900 sans conserver les proportions.

Ce que j'ai essayé pour la première partie est:

$ mogrify -format jpg -- *

Mais lorsque je fais cela, l'utilisation de la mémoire augmente très rapidement, puis le processus est tué. Ce que j'ai essayé pour le redimensionnement est:

$ mogrify -resize 900x900 -- *
mogrify: insufficient image data in file `109.jpg' @ error/jpeg.c/ReadJPEGImage/1039.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.
mogrify: no decode delegate for this image format `' @ error/constitute.c/ReadImage/501.

Comme je l'ai dit, les noms des fichiers sont des numéros séquentiels. J'ai aussi ce qui suit:

$ file * | grep -Po "^\d*: *\K[^:,]*(?=,)" | sort | uniq
ASCII text
GIF image data
JPEG image data
PNG image data

Alors quel est le problème? Comment puis-je le réparer?

2
yukashima huksay

Je vous recommande d'utiliser l'outil convert d'ImageMagick:

convert input.png -resize 900x900 output.jpg

L'option -resize devrait être assez évidente et le format du fichier de sortie est automatiquement déterminé à l'aide de son extension.

Pour l'exécuter sur tous les fichiers du répertoire actuel, essayez ceci:

for inputfile in ./* ; do
    outputfile="${inputfile%.*}.jpg"
    convert "$inputfile" -resize 900x900 "$outputfile" &&
    [[ -e "$outputfile" && "$inputfile" != "$outputfile" ]] && rm "$inputfile"
done

Tous les fichiers du répertoire en cours (quel que soit leur type) seront ainsi créés. Pour chaque fichier d'entrée, créez le nom du fichier de sortie correspondant en supprimant l'ancienne extension et en ajoutant ".jpg". Ensuite, il utilise convert comme décrit ci-dessus pour redimensionner et convertir l'image, ce qui crée un nouveau fichier et conserve l'original tel quel. Si cela réussit (&&), vérifiez si le fichier de sortie existe et si le nom du fichier d'entrée est différent du nom du fichier de sortie (par exemple, si l'un des fichiers d'origine était déjà un fichier jpg). Maintenant, si ces conditions sont remplies, nous supposons que nous pouvons supprimer le fichier d'entrée.

6
Byte Commander