Magazine

Imagemagick et zenphoto pour votre galerie photo - détection de la rotation (3)

Publié le 12 juin 2008 par Gnomeinwonderland

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...


Retour à La Une de Logo Paperblog

A propos de l’auteur


Gnomeinwonderland 6 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte