Redimensionnez les images par lots dans un nouveau dossier à l’aide d’ImageMagick

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

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

Que fais-je?

    convert est conçu pour gérer un seul fichier d’entrée, pour autant que je sache, même si je dois admettre que je ne comprends pas le résultat obtenu. 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 cela dangereux pour un usage général (cela écrasera les images originales si vous oubliez que -path ), donc j’utilise toujours convert associé à une boucle for pour cela:

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

    L’appel de nom de base n’est pas nécessaire si vous basename des fichiers dans le répertoire en cours.

    C’était 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 de 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 miniatures redimensionnées qui ont toutes la même largeur et la même hauteur. 🙂 merci à ImageMagick.

    Voici une solution sans utiliser de boucles sur la console

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

    Bien que ce soit une vieille question, mais j’ajoute cette réponse pour le bénéfice de quiconque trébuche sur ce point.

    J’avais 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 en utilisant en interne la commande convert .

    Veuillez noter que ceci est toujours un travail en cours. J’apprécierai toute sorte de commentaires que je peux obtenir.

    Cela fonctionne pour moi

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

    produit image-0.jpg, image-1.jpg, image-2.jpg ….. dans le dossier ‘tourner’. Je ne sais pas comment conserver les noms de fichiers originaux.

    J’ai trouvé que cd -ing dans le dossier souhaité, puis en utilisant la variable globale bash $PWD fait que ma convert ne jette aucune erreur. J’utilise la caption: récemment implémentée d’ImageMagick caption: http://soffr.miximages.com/image/; 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