Retailler des 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 800×800 -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 800×800, 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
}
You must be logged in to post a comment.