Forum Programmation.shell Conversion multiple avec imagemagick

Posté par  .
Étiquettes :
1
21
nov.
2008
Je cherche la ligne de commande a taper pour redimentionner toutes les images d'un dossier en 640x480.

Pour l'instant je fait:

mogrify *.jpg -geometry 640

le probleme c est que "mogrify" modifie l original donc je cherche plustot a utiliser "convert" mais je ne sais pas l utiliser pour de multiples images.

L autre probleme c est que la commande que j utilise ne prend pas en compte l orientation (portrait ou paysage) des image. Je ne sais pas comment dire a imagemagick de prendre comme reference le plus grand cote de la photo.

Merci d avance
  • # Boucle for

    Posté par  . Évalué à 3.

    Bonjour,

    J'utilise convert pour faire ça.

    Imaginons que tes photos s'appelle toutes Photo???.jpg.

    Premier exemple tu fais précéder toutes les photos par préfixe mod_ et tu les redimensionnes avec une largeur de 1024 pixels :

    for i in *.jpg; do convert $i -resize 1024x mod_$i; done

    Tu peux aussi carrément changer le nom Photo en Image, toujours en les redimensionnant :

    for i in *.jpg; do convert $i -resize 1024x $(echo $i | sed s/Photo/Image/); done

    Et hop !
    • [^] # Re: Boucle for

      Posté par  (site web personnel) . Évalué à 3.

      Quand on précise -resize 640x640 , la conversion se fera dans le carré indiqué, mais en respectant les proportions (et donnera donc 640x480 ou 480x640 selon l'orientation --- il y a des variantes plus compliquées).

      L'appel à Sed est inutile, le shell (Bash, Zsh, ...) sait modifier ses variables, qu'il vaut mieux protéger en cas d'espaces :
      convert "$i" -resize -40x640 "Image${i#Photo}"

      On peut aussi n'appeler qu'une seule instance de mogrify pour éviter la boucle, en rusant sur l'extension :
      mogrify -format jpeg -resize 640x640 '*.jpg'
    • [^] # detail de la commande

      Posté par  . Évalué à 1.

      serait il possible d avoir une petite explication des instructions

      for i in

      $i

      mod_$i

      car je ne comprend pas a quoi ca sert et j aimerai bien comprendre ce que je tape en console.
      • [^] # Re: detail de la commande

        Posté par  . Évalué à 2.

        C'est du shell, donc voir un tutorial dessus.

        Mais bon rapidment "for" est une boucle.

        "for i in" > pour tout i compris dans (en l'occurence ici tous les *.jpg)
        "$i" désigne le fichier en cours dans la boucle
        mod_$i désigne le nom du fichier précédé par mod_

        En clair si tu as dans ton répertoire les fichiers :
        1.jpg
        2.jpg
        ...

        $i désigne 1.jpg puis 2.jpg ...
        mod_$i désigne mod_1.jpg mod_2.jpg ...
  • # Et l'aide de convert ?

    Posté par  (site web personnel) . Évalué à 2.

    http://www.imagemagick.org/script/command-line-processing.ph(...)
    Recherche la chaîne "Inline Image Resize"

    Pour la taille, utilise soit un pourcentage (le plus pratique), ou l'opérateur ^
    http://www.imagemagick.org/script/command-line-options.php#r(...)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.