web-dev-qa-db-fra.com

Lot redimensionner les images dans un nouveau dossier en utilisant ImageMagick

J'ai un dossier d'images sur 4MB - appelons ce dossier dsc_big/. J'aimerais utiliser convert -define jpeg:extent=2MB pour les convertir sous 2MB et copier dsc_big/* dans un dossier dsc_small/ qui existe déjà.

J'ai essayé convert dsc_big/* -define jpeg:extent=2MB dsc_small/ mais cela produit des images appelées -0, -1, etc.

Que fais-je?

39
tekknolagi

convert est conçu pour gérer un seul fichier d'entrée autant que je sache, bien que je dois admettre que je ne comprends pas le résultat que vous obtenez. mogrify convient mieux au traitement par lots dans le style suivant:

mogrify -path ../dsc_small -define jpeg:extent=2MB dsc_big/*

Mais honnêtement, je considère que c'est dangereux pour un usage général (ça écrasera les images originales si vous oubliez ce -path), donc j'utilise toujours convert avec une boucle for pour cela:

for file in dsc_big/*; do convert $file -define jpeg:extent=2MB dsc_small/`basename $file`; done

L'appel basename n'est pas nécessaire si vous traitez des fichiers dans le répertoire en cours.

50
Eduardo Ivanec

C’est la commande qui m’a aidé après un long essai .. Je voulais créer des vignettes de même taille à partir d’une grande liste de grandes images de largeur et hauteur variables. C'était pour créer une page de galerie.

convert -define jpeg:size=250x200 *.jpg  -thumbnail 250x200^ -gravity center -extent 250x200  crop/thumbnail-%d.jpeg

J'ai des vignettes redimensionnées qui ont toutes la même largeur et la même hauteur. :) merci à ImageMagick.

4
sajin tm

Voici une solution sans utiliser des boucles for sur la console

convert *.jpeg -define jpeg:extent=2MB -set filename:f '../dsc_small/%t_small.%e' +adjoin '%[filename:f]'
3
Nacho

Bien que ce soit une vieille question, mais j'ajoute cette réponse au profit de quiconque trébuche dessus.

J'avais exactement le même problème et, découragé par l'utilisation de mogrify, j'ai écrit un petit utilitaire basé sur Python appelé easymagick pour faciliter ce processus tout en utilisant la commande convert

S'il vous plaît noter, ceci est toujours un travail en cours. J'apprécierai tout type de commentaires que je peux obtenir.

1
Danish

Ça marche pour moi

convert -rotate 90 *.png rotate/image.jpg 

produit image-0.jpg, image-1.jpg, image-2.jpg ..... dans le dossier "rotation". Cependant, je ne connais pas de moyen de conserver les noms de fichiers d'origine.

0
Khawar

J'ai trouvé que cding dans le dossier souhaité, puis l'utilisation de la variable globale bash $PWD a fait que ma convert n'a généré aucune erreur. J'utilise le caption:http://www.imagemagick.org/Usage/text/#caption récemment implémenté par ImageMagick pour étiqueter mes images avec le nom de fichier de base et les placer dans un autre répertoire dans le premier.

cd ~/person/photos
mkdir labeled
for f in $PWD/*.JPG; do
    width=$(identify -format %w $f)
    filename=$(basename $f .JPG)
convert -background '#0008' -colorspace transparent -fill white -gravity center -size ${width}x100  caption:"${filename}" ${f} +swap -gravity south -composite "$PWD/labeled/${filename}.jpg";
done
0
Valerie Anderson