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
lire la suite
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.