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

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

par Alexis Kozan, 30 novembre 1999, modéré le 12 juin 2008
catégorie Logiciel, Graphisme, Astuces

lire la suite 0 commentaire  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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