Troisième billet consacré à la mise en ligne ultra-rapide de photos dans une galerie photo motorisée par Zenphoto, en utilisant ImageMagick, des outils graphiques "classiques", et le tout mis en oeuvre par un script bash - tout ce qu'il y a de plus commun [voir le billet précédent sur la création du masque des photos].
Dans ce billet, nous allons voir comment assigner la bonne rotation à nos photos.
Des données EXIF à la rotation
On a vu dans le premier billet sur le sujet que les données EXIF nous indiquent dans quel sens la photo a été prise... mais elles ne la positionnent pas pour autant dans le bons sens. Il nous faut donc interroger les données EXIF et donner l'ordre de rotation correspondant s'il y a lieu.Allez hop : un peu de script bash. Pas de panique, je reprendrai l'ensemble dans le dernier billet sur le sujet : premières lignes, droits d'execution sur le fichier, emplacement du ficher, etc. Pour l'instant, regardons simplement...
Je vais créer une fonction : pour chaque photo, je ferai un test. Ma fonction interrogera les données EXIF, et renvera l'angle de rotation à faire subir à cette photo.
La fonction
Voici la fonction, les commentaires suivent...function EXIF-ORIENT() {
# vérification de l'orientation de la photo selon les données EXIF
# fixe dans $TEMPTXT la valeur de la rotation à effectuer
FILE=$1
TEMPTXT=$2
echo "$FILE..."
typeset -i ORIENT=$(identify -format "%[exif:*]" $FILE |grep Orientation |cut -c 18-21)
if [ $ORIENT -ne 1 ]
then
if [ $ORIENT -eq 8 ]
then
OPARAM=270
elif [ $ORIENT -eq 6 ]
then
OPARAM=90
fi
else
OPARAM=0
fi
echo $OPARAM > $TEMPTXT
}
Quelques explications...
Dans mon script définitif, j'appellerai la fonction EXIF-ORIENT en lui faisant passer 2 paramètres : le premier ($1) est le nom du fichier de la photo correspondante, et le second ($2) l'emplacement et le nom d'un fichier dans lequel j'écrirai la rotation à faire subir à la photo.Comme on l'aura vu dans le premier billet, je me sert du programme identify contenu dans le pack ImageMagick pour déterminer les données EXIF du fichier photo. Attention : selon votre version d'ImageMagick, sortie produite par la commande identify sera un tout petit peu différente, mais risque de produire des erreurs en chaîne avec les deux pipes "|" effectués par grep et cut sur la chaîne de caractères récupéréé : car normalement j'obtiens une ligen du genre "Exif:Orientation: 1", j'en isole les caractères n°18, 19, 20 et 21 puis je converti la chaîne de caractère en une valeur numérique... Si on décale tout, ça risque de mal se passer... ;-)
Si tout va bien, j'obtiens la valeur numérique $ORIENT qui est la valeur EXIF de mon fichier photo. Alors je fais un test if... then... pour à partir de ses valeurs attribuer une autre valeur, celle qui déterminera en degré la rotation qui est nécessaire de donner à ma photo. Cette valeur est assignée à $OPARAM, et sera inscrite dans mon fichier temportaire... celui que j'ai précisé en appelant ma fonction.
Le prochain billet portera sur le coeur du script de traitement : l'utilisation de convert et composite (du pack ImageMagick), la mise en place des variables, etc. Long billet en perspective...