Afficher les données EXIF des images

Plugin EXIF pour Spip 1.9.2 et squelette d’affichage

Plugin pour disposer le la balise EXIF pour SPIP 1.9.2 et squelette EXIF pour afficher les données de l’appareil photo.
Rq : Pour SPIP 1.9, 2 et 3 il y a le plugin Metadonnées Photo qui présente les métadonnées EXIF, ,GPS et IPTC d’une photo.

Préambule

Cette contribution à pour but de rassembler les connaissances autour de la gestion des données EXIF des images.
Vous trouverez donc :

-  Le plugin EXIF en version compatible Spip 1.9.2, fournissant la balise EXIF.
-  Un squelette d’affichage des données EXIF contenues dans la balise.
-  Un exemple de rendu d’affichage de ce squelette.
-  Une explication technique sur les les format et les données EXIF.
-  La doc technique de la balise EXIF : Liste des champs accessibles par la balise.
-  Des liens pour aller plus loin sur l’EXIF, pour les dévelloppeurs ...

Le plugin EXIF

Ce plugin permet de disposer d’une nouvelle balise #EXIF
qui permet d’accéder aux données Exif des images et photos du site.
Il reprend une contrib Spip de Mortimer (merci à lui) sous forme de plugin afin d’offrir la possibilité d’utiliser la balise #EXIF dans les squelettes.

Attention :
-  Le plugin proposé ici est seulement une adaptation du plugin existant de Pierre Andrews, merci à lui.
-  Le plugin n’a pas été vérifié sur toute les versions de Spip,
mais il fonctionne sur version Spip 1.9.2.

Le plugin intègre une fonction « update_date_exif » qui permet de mettre à jour les dates Exif de toutes les photos du site d’un seul coup.
Cette fonction doit être appelée par votre navigateur dans le répertoire « ecrire/ » de votre site Spip.

L’appel à cette fonction était soumis à un controle de l’authentification qui l’empêchait de fonctionner sous Spip 1.9.2, j’ai donc fait sauter ce controle.
Ceci signifie qu’il y a potentiellement une faille de sécurité dans la fonction modifiée « exif/actions/update_date_exif.php ».
(Supprimez le fichier en question si vous ne souhaitez pas prendre de risque)

-  Télécharger le plugin EXIF modifié :

Plugin balise EXIF pour 1.9.2

Un squelette pour le plugin EXIF

Ce petit squelette, permet le bon formattage des données fournies par la balise EXIF, ainsi que l’affichage avec mise en forme de ces données Exif.

-  Télécharger le fichier du Squelette EXIF modifié pour Spip 1.9.2 :

Squelette EXIF pour 1.9.2

Ce code est à ajouter dans son squelette (article.html par exemple), afin d’afficher correctement une majorité de données venant de la balise EXIF.

Pour fonctionner, il devra être placé dans une boucle ARTICLES ou une boucle DOCUMENTS afin d’afficher les données Exif des images contenues dans une de ces 2 boucles :
-  Dans une boucle DOCUMENTS, les données Exif affichées seront celles des images affichés par votre boucle,
-  Dans une boucle ARTICLES, les données Exif affichées seront celles des images associées à l’article sélectionné par votre boucle.

Voici le code :

<B_exif>
Données EXIF

<BOUCLE_exif(DOCUMENTS){id_document}{mode=document}{extension=jpg}{doublons}>
<div align="center">

<div class="contenuSpip">[ Détails du cliché ]</div>
[<li>Date: (#EXIF{EXIF,DateTimeOriginal})</li>]
[<li>Taille originale: #EXIF{EXIF,ExifImageWidth}&nbsp;x&nbsp;(#EXIF{EXIF,ExifImageLength}) pixels</li>]
<BR>
<div class="contenuSpip">[ Paramètres de l'appareil ]</div>
[<li>Modèle: (#EXIF{IFD0,Model})</li>]
[<li>ISO: (#EXIF{EXIF,ISOSpeedRatings})</li>]
[<li>Programme: (#EXIF{EXIF,ExposureProgram}|replace{1,Réglage Manuel}|replace{3,Priorité Ouverture})</li>]
<BR>
<div class="contenuSpip">[ Focale ]</div>
[<li>Longueur: (#EXIF{EXIF,FocalLength}|div{1})mm</li>]
[<li>Ouverture: f(#EXIF{EXIF,FNumber}|div{10})</li>]
<!-- [<li>Ouverture Max: f(#EXIF{EXIF,MaxApertureValue}|div{10})</li>] -->
<BR>
<div class="contenuSpip">[ Exposition ]</div>
[<li>Temps: (#EXIF{EXIF,ExposureTime})ème de sec</li>]
[<li>Mesure: (#EXIF{EXIF,ExposureMode}|replace{0,Exposition Automatique}|replace{1,Exposition Manuelle})</li>]
[<li>Mode de mesure: (#EXIF{EXIF,MeteringMode}|replace{5,Manuel}|replace{6,Central Pondéré}|replace{1,Moyenne})]</li>
[<li>Correction: (#EXIF{EXIF,ExposureBiasValue}|div{1}) iL</li>]
<BR>
<div class="contenuSpip">[ Lumière ]</div>
[<li>Balance des blancs: (#EXIF{EXIF,WhiteBalance}|replace{0,Automatique}|replace{1,Manuelle})</li>]
[<li>Source: (#EXIF{EXIF,LightSource})</li>]
[<li>Flash: (#EXIF{EXIF,Flash}|replace{16,Sans})</li>]
<BR>
<div class="contenuSpip">[ Post-traitement ]</div>
[<li>Contraste: (#EXIF{EXIF,Contrast})</li>]
[<li>Saturation: (#EXIF{EXIF,Saturation})</li>]
[<li>Netteté: (#EXIF{EXIF,Sharpness})</li>]
[<li>Compression: (#EXIF{EXIF,CompressedBitsPerPixel}|div{1}) bits/pixel</li>]
<div class="contenuSpip">[<BR>Version Exif: (#EXIF{EXIF,ExifVersion})]</div>

</div>
</BOUCLE_exif>

<BR>
</B_exif>

Résultat d’affichage des données Exif

Pour l’image ci-dessus, on doit obtenir ceci :

[ Détails du cliché ]

Date : 2008:04:12 21:08:03
Taille originale : 3456 x 2304 pixels

[ Paramètres de l’appareil ]

Modèle : Canon EOS 350D
ISO : 400
Programme : Réglage Manuel

[ Focale ]

Longueur : 100mm
Ouverture : f6.3

[ Exposition ]

Temps : 5/10e de sec
Mesure : Exposition Manuelle
Mode de mesure : Manuel
Correction : 0 iL

[ Lumière ]

Balance des blancs : Manuelle
Flash : Sans

[ Post-traitement ]

Compression : 0 bits/pixel

Version Exif : 0221

-  Voir un exemple en ligne (cliquer sur « Données EXIF » en dessous de la photo)

Explication technique : Le format EXIF

Principe :

EXIF est une abréviation de Exchange Image File. Ce format définit les informations d’ordre technique contenues dans les fichiers images. Comme les champs IPTC, ce sont des métadonnées de type interne. Ces informations concernent la prise de vue et les réglages de l’appareil au moment de la capture numérique.

Le format EXIF a été développé en octobre 1995 par le JEIDA (Japan Electronic Industry Development Association). La version 2.0 date de novembre 1997 et la révision 2.2 d’avril 2002.

Technique :

Fondamentalement, le format de fichier EXIF est le même que le format de fichier JPEG ou que le format de fichier TIFF suivant le mode de traitement de l’image qui a été choisi. Le format EXIF insère des informations sur l’image/appareil et une image miniature dans le fichier JPEG ou TIFF en gardant la conformité à la spécification JPEG ou TIFF. Cependant, nous pouvons noter que la plupart des logiciels de retouche d’image ne conservent pas les données EXIF lors de l’enregistrement d’une image.

La plupart des métadonnées EXIF ont trait aux caractéristiques techniques des images telles qu’elles peuvent être fournies par l’appareil au moment de la prise de vue : fabricant et modèle de l’appareil, hauteur et largeur de l’image, date et heure de la prise de vue, résolution, temps d’exposition, ouverture, présence d’un flash, etc.

Cependant, plusieurs champs EXIF concernent la description de l’image et sont manifestement concurrents de certains champs IPTC essentiels :
-  Titre de l’image (EXIF ImageDescription ? = IPTC HeadLine ?)
-  Personne ayant créé l’image (EXIF Artist = IPTC By-Line)
-  Titulaire du Copyright (EXIF Copyright = IPTC Copyright Notice)

Les marqueurs :

Un fichier JPEG ou TIFF contient des données hexadécimales de la forme 0xFFXX qui sont appelées « Marqueurs ». Elles délimitent des zones particulières de données d’information.

La structure de données Exif :

Grossièrement la structure des données Exif (APP1) est montrée ci-dessous. Elle applique l’alignement "Intel" des octets et contient une image miniature au format JPEG. Comme décrit précédemment, les données Exif commencent par les caractères ASCII "Exif" et 2 octets 0x00, puis suivent les données Exif. L’Exif utilise le format TIFF pour enregistrer les données.

FFE1 Marqueur APP1
SSSS Données APP1 Taille des données APP1
45786966 0000 En-tête Exif
49492A00 08000000 En-tête TIFF
XXXX. . . . IFD0 (image principale) Répertoire
LLLLLLLL Lien vers IFD1
XXXX. . . . Zone de données de IFD0
XXXX. . . .   Exif SubIFDRépertoire
00000000 Fin du lien
XXXX. . . . Zone de données Exif SubIFD
XXXX. . . .   Interopérabilité IFD Répertoire
00000000Fin du lien
XXXX. . . . Zone de données de l’Interopérabilité IFD
XXXX. . . . Makernote IFDRépertoire
00000000 Fin du lien
XXXX. . . . Zone de données Makernote IFD
XXXX. . . . IFD1(image miniature) Répertoire
00000000 Fin du lien
XXXX. . . . Zone de données de IFD1
FFD8XXXX. . . XXXXFFD9 Image miniature

Après l’en-tête TIFF, se trouve le premier IFD (Image File Directory). Il contient les données d’information de l’image.

Dans un fichier au format Exif, le premier IFD est IFD0 (IFD de l’image principale), puis il pointe vers IFD1 (IFD de l’image miniature) et les liens IFD sont terminés. Mais IFD0/IFD1 ne contiennent aucune information de l’appareil photo numérique telle que la vitesse d’obturation, la distance focale, etc. IFD0 contient toujours un marqueur spécial Exif Offset (0x8769), il donne un offset vers Exif SubIFD ?. Exif SubIFD ? est une zone de données formatées comme un IFD. Cette zone contient les informations relatives à l’appareil photo numérique. Dans le cas du format étendu Exif (Exif2 ?.1/DCF), Exif SubIFD ? contient un marqueur spécial Offset de l’interopérabilité Exif (0xa005). Il pointe vers un IFD Interopérabilité. Suivant la spécification DCF, ce marqueur est obligatoire et autant IFD0 (IFD de l’image principale) que IFD1 (IFD de l’image miniature) doivent avoir un IFD d’interopérabilité.

Le format Exif contient généralement une miniature de l’image. Habituellement elle est enregistrée à la suite de l’IFD1. Il y a 3 formats possibles pour les miniatures : le format JPEG (JPEG utilise YCbCr), le format RGB TIFF et le format YCbCr TIFF. Il semblerait que le format JPEG avec une dimension de 160x120 pixels soit le format recommandé pour l’image miniature dans la norme Exif 2.1 ou suivante.

Critique :

EXIF est à réserver uniquement pour les métadonnées techniques relatives à la prise de vue et fournies automatiquement par un appareil numérique. Modifier ces métadonnées constitue donc un non-sens en rajoutant par exemple des informations sur l’auteur de l’image. De nombreux logiciels de photos permettent de lire les informations EXIF et d’en modifier certaines.

De plus, les métadonnées EXIF sont applicables uniquement aux images au format JPEG ou TIFF. Les images miniatures contenues dans le format EXIF permettent de faciliter la consultation en ligne de celles-ci sur Internet, puisqu’elles sont moins lourdes à manipuler. Cependant, de nombreux logiciels de retouche d’images enlèvent facilement les métadonnées EXIF.

Merci à L. Angama, étudiante à Montpellier.

Pour aller plus loin

-  Le plugin EXIF original par Pierre Andrews sur la Zone

-  La contrib d’origine EXIF par Mortimer

-  Description of EXIF File Format (en anglais)

-  Les données supplémentaires de la balise #EXIF affichables (voir le tableau)

Quelques Tags Exif utilisables
Tag No. Tag NameFormat CompoNo Desc.
0x829a ExposureTime unsigned rational 1 Exposure time (reciprocal of shutter speed). Unit is second.
0x829d FNumber unsigned rational 1 The actual F-number(F-stop) of lens when the image was taken.
0x8822 ExposureProgram unsigned short 1 Exposure program that the camera used when image was taken. ’1’ means manual control, ’2’ program normal, ’3’ aperture priority, ’4’ shutter priority, ’5’ program creative (slow program), ’6’ program action(high-speed program), ’7’ portrait mode, ’8’ landscape mode.
0x8827 ISOSpeedRatings unsigned short 2 CCD sensitivity equivalent to Ag-Hr film speedrate.
0x9000 ExifVersion undefined 4 Exif version number. Stored as 4bytes of ASCII character (like « 0210 »)
0x9003 DateTimeOriginal ascii string 20 Date/Time of original image taken. This value should not be modified by user program.
0x9004 DateTimeDigitized ascii string 20 Date/Time of image digitized. Usually, it contains the same value of DateTimeOriginal(0x9003).
0x9101 ComponentConfiguration undefined
Unknown. It seems value 0x00,0x01,0x02,0x03 always.
0x9102 CompressedBitsPerPixel unsigned rational1 The average compression ratio of JPEG.
0x9201 ShutterSpeedValue signed rational1 Shutter speed. To convert this value to ordinary ’Shutter Speed’ ; calculate this value’s power of 2, then reciprocal. For example, if value is ’4’, shutter speed is 1/(2^4)=1/16 second.
0x9202 ApertureValue unsigned rational1 The actual aperture value of lens when the image was taken. To convert this value to ordinary F-number(F-stop), calculate this value’s power of root 2 (=1.4142). For example, if value is ’5’, F-number is 1.4142^5 = F5.6.
0x9203 BrightnessValue signed rational1 Brightness of taken subject, unit is EV.
0x9204 ExposureBiasValue signed rational1 Exposure bias value of taking picture. Unit is EV.
0x9205 MaxApertureValue unsigned rational1 Maximum aperture value of lens. You can convert to F-number by calculating power of root 2 (same process of ApertureValue(0x9202).
0x9206 SubjectDistance signed rational1 Distance to focus point, unit is meter.
0x9207 MeteringMode unsigned short1 Exposure metering method. ’1’ means average, ’2’ center weighted average, ’3’ spot, ’4’ multi-spot, ’5’ multi-segment.
0x9208 LightSource unsigned short1 Light source, actually this means white balance setting. ’0’ means auto, ’1’ daylight, ’2’ fluorescent, ’3’ tungsten, ’10’ flash.
0x9209 Flash unsigned short1 ’1’ means flash was used, ’0’ means not used.
0x920a FocalLength unsigned rational1 Focal length of lens used to take image. Unit is millimeter.
0x927c MakerNote undefined
Maker dependent internal data. Some of maker such as Olympus/Nikon/Sanyo etc. uses IFD format for this area.
0x9286 UserComment undefined
Stores user comment.
0xa000 FlashPixVersion undefined 4 Stores FlashPix version. Unknown but 4bytes of ASCII characters « 0100 »exists.
0xa001 ColorSpace unsigned short 1 Unknown, value is ’1’.
0xa002 ExifImageWidth unsigned short/long 1 Size of main image.
0xa003 ExifImageHeight unsigned short/long 1
0xa004 RelatedSoundFile ascii string
If this digicam can record audio data with image, shows name of audio data.
0xa005 ExifInteroperabilityOffset unsigned long 1 Extension of « ExifR98 », detail is unknown. This value is offset to IFD format data. Currently there are 2 directory entries, first one is Tag0x0001, value is « R98 », next is Tag0x0002, value is « 0100 ».
0xa20e FocalPlaneXResolution unsigned rational 1 CCD’s pixel density.
0xa20f FocalPlaneYResolution unsigned rational 1
0xa210FocalPlaneResolutionUnit unsigned short 1 Unit of FocalPlaneXResoluton/FocalPlaneYResolution. ’1’ means no-unit, ’2’ inch, ’3’ centimeter.
0xa217SensingMethod unsigned short 1 Shows type of image sensor unit. ’2’ means 1 chip color area sensor, most of all digicam use this type.
0xa300FileSource undefined 1 Unknown but value is ’3’.
0xa301SceneType undefined 1 Unknown but value is ’1’.

Reste à faire :

-  Créer un squelette plus complet pour affichage de toutes les données disponibles dans la balise EXIF.

-  Inscrire les codes d’échappement de tous les champs de la balise EXIF, afin d’avoir des termes parlant plutot que des chiffres (ex : « Balance des blancs : 1 » devient « Balance des blancs : Manuelle »).

-  Ajouter l’affichage des données complètes contenues dans la section « IFD0 » de la balise EXIF (section contenant les informations sur la marque, le modèle, le constructeur de l’appareil...) et aussi les données de la section « IFD0 ».

-  Trouver/créer des icones pour un rendu visuel des données Exif.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom