Retailler des photos
June 7, 2010 by nonoCatégories geekeries - Mots-clés ImageMagick photos
Retailler des photos, c'est facile. Un p'tit coup de convert ou de mogrify et c'est tout bon.
Sauf qu'en vrai, c'est un peu moins évident que ça. Il leur manque une fonctionnalité élémentaire : un critère sur la taille du fichier obtenu (en gros, un mogrify -geometry 800x800 -max-filesize 200K). C'est dommage, j'en aurais bien l'utilité pour publier des photos sur certain site web. Du coup, j'ai bricolé en vitesse un petit bout de fonction zsh pour retailler des photos en 800x800, 200 Ko maximum.
Il y a plein de trucs codés en dur dedans et on sent bien mes restes de programmation de mon enfance, mais ça marche à peu près. ;-)
## Retaillage en 800x800, 200 Ko pour PentaxOne resize4p1 () { if [[ $# -ne 1 ]] then echo "usage: resize4p1 source.jpeg" return 1 fi source=$1 dest=$(basename $source .jpeg).small.jpeg if [[ ! -f $source ]] then echo "E: Source file ${source} does not exist." return 1 fi if [[ -f $dest ]] then echo "E: Destination file ${dest} already exists." return 1 fi # Premiere passe en dur, pas beau mais initialise le "until" comme il faut. echo -n "Quality 100 ... " convert -antialias -geometry 800x800 -quality 100 $source $dest filesize=$(du -sk $dest | awk '{ print $1 }') echo "done -- file size is $filesize KB." q=99 until [[ $filesize -lt 200 ]] do echo -n "Quality $q ... " convert -antialias -geometry 800x800 -quality $q $source $dest filesize=$(du -sk $dest | awk '{ print $1 }') echo "done -- file size is $filesize KB." q=$(($q - 1)) if [[ $q -lt 1 ]] then echo "E: Quality 1 is not small enough -- unexpected error." return 1 fi done }