IPTC - Métadonnées des photos
Par Akh le vendredi, 23 mars 2012, 11:48 - Lien permanent
Je me suis lancé dans une tâche chronophage (encore une !) de scanner les vieux albums photo de famille. Enfin j'ai commencé, ralenti, arrêter, re-commencer, etc ...
Et avec le recul puisque cela fait un petit moment que j'ai commencé, je me suis rendu compte qu'en fait je perdais de l'information, j'ai bien essayé de trouver un titre reprenant le plus possible d'information sur la photo (Date, lieux, personnages, ...) présent sur le recto ou annoté autour, mais c'est pas vraiment possible.
L'étape suivante a été de créer un fichier texte, dans lequel je tapais le plus possible d'information connue par photo en les faisant précédé d'un mot clé (photo=, qui=, date=, etc ...) et là non plus ce n'est pas la solution, c'est lourd à créer et à exploiter.
Je me suis dit qu'un fichier texte par photo ce serait mieux, pas très pratique mais un moindre mal.
Et puis je suis tombé sur les métadonnées de fichier JPG ou TIF, et là je me suis dit bingo c'est la solution. Bon on élimine les données EXIF, elles sont spécifiques à la prise de vue et générées automatiquement, mais les données IPTC pour International Press Telecommunications Council semblent idéales, c'est un standard et c'est implémenté dans pleins de logiciels (dont XnView).
Voici mon exploration de ces métadonnées IPTC et une solution en PHP pour les récupérer, après je pourrai les afficher en légende, créer une base de données pour des recherches, etc ...
Rappel
D'abord un petit rappel des informations (quand elles existent) que je souhaite stocker avec la photo :
Titre | un titre éventuel, même si je préfère la notion d'annotation |
---|---|
Date | la date même incomplète |
Agenda | l’événement à l'origine le la photo (anniversaire, vacances, visites, ...) |
Personnes | les personnes visibles de gauche à droite |
Lieux | la dénomination des lieux (Ville, Quartier, nom de la maison) |
Annotations | les annotations, commentaires avec leurs auteurs |
Tags | des mots-clés |
Cliché | l'auteur du cliché, parfois seulement le propriétaire de l'appareil photo. |
XnView
J'ai pris une photo sous XnView et j'ai rempli l'ensemble des métadonnées IPTC avec des textes que je pourrai retrouver
Php
J'ai ensuite exécuter ce petit script pour identifier les métadonnées remontant
<?php $jpgFile = "test_image.jpg"; print "\n<html><head><title>ITPC</title></head><body>"; print "\n<pre>"; GetImageSize ($jpgFile,$info); $iptc = iptcparse($info["APP13"]); print_r($iptc); print "\n</pre>"; print "</body></html>"; ?>
Analyse
En croisant les codes renvoyés, les libellés de XnView et d'autres informations glanées ici ou là sur la toile, j'arrive à ce tableau qui va me permettre de choisir l'implantation de mes informations dans les métadonnées.
key | Idx | Nbc | Section | Zone | Mes infos |
---|---|---|---|---|---|
2#120 | 0 | 2000c | Légende | Légende | Annotations |
2#122 | x | x32c | Auteur | ||
2#105 | 0 | 256c | Titre | Titre | |
2#040 | 0 | 256c | Instructions spéciales | Agenda | |
2#025 | x | x64c | Mots clés & Catégories | Mots-clés | Tags |
2#015 | 0 | 3c | Catégorie | ||
2#020 | x | x32c | Catégories supplémentaires | Lieux | |
2#116 | 0 | 128c | Crédit | Copyright© | Cliché |
2#080 | x | x32c | Créateur | ||
2#085 | x | x32c | Titre du créateur | ||
2#110 | 0 | 32c | Crédit | ||
2#115 | 0 | 32c | Source | ||
2#007 | 0 | 64c | Statut | Statut éditorial | |
2#022 | 0 | 32c | Job ID | ||
2#065 | 0 | 32c | Programme | ||
2#070 | 0 | 10c | Version du programme | ||
2#010 | 0 | 1c | Priorité | ||
2#075 | 0 | 1c | Cycle de l'objet | ||
2#005 | 0 | 64c | Origine | Nom de l'objet | |
2#090 | 0 | 32c | Ville | ||
2#092 | 0 | Région | |||
2#095 | 0 | 32c | Province/Etat | ||
2#101 | 0 | 64c | Pays | ||
2#100 | 0 | 3c | Code pays | ||
2#103 | 0 | 32c | Référence de la transmission | ||
2#055 | 0 | 8c | Date de création (AAAMMJJ) | Date | |
2#060 | 0 | 11c | Heure de création | ||
2#030 | 0 | 8c | Date de sortie (AAAAMMJJ) | ||
2#035 | 0 | 11c | Heure de sortie | ||
2#118 | x | x128c | Contact | Personnes | |
2#027 | x | Emplacement contenu | |||
2#026 | 0 | ||||
2#000 | 0 | ||||
2#045 | x | x10c | Reference service | ||
2#047 | 0 | 8c | Reference Date | ||
2#050 | 0 | 10c | Reference Number | ||
2#130 | 0 | 2c | Image Type |
Php (bis)
Voici le script qui va me permettre de récupérer sous forme de tableau les infos pour une photo. J'ai séparé les annotations entre elles non par des virgules, mais par des | et des = sous cette forme : papy=mamie rigole|moi=elle est bourrée !|mon frère=t'es gonflé.
<?php define('ITPC_TITRE','2#105'); define('ITPC_AGENDA','2#040'); define('ITPC_DATE','2#055'); define('ITPC_LIEU','2#020'); define('ITPC_QUI','2#118'); define('ITPC_COMMENT','2#120'); define('ITPC_CLICHE','2#116'); define('ITPC_TAG','2#025'); $jpgFile = "test_image.jpg"; print "\n<html><head><title>ITPC</title></head><body>"; print "\n<pre>"; GetImageSize ($jpgFile,$infFile); $arrayIPTC = iptcparse($infFile["APP13"]); $infoITPC['Titre'] = $arrayIPTC[ITPC_TITRE][0]; $infoITPC['Agenda'] = $arrayIPTC[ITPC_AGENDA][0]; $infoITPC['Date'] = $arrayIPTC[ITPC_DATE][0]; $infoITPC['Lieu'] = $arrayIPTC[ITPC_LIEU]; $infoITPC['Qui'] = $arrayIPTC[ITPC_QUI]; foreach(explode('|',$arrayIPTC[ITPC_COMMENT][0]) as $v) { $infoITPC['Comment'][] = explode('=',$v); } $infoITPC['Cliche'] = $arrayIPTC[ITPC_CLICHE][0]; $infoITPC['Tag'] = $arrayIPTC[ITPC_TAG]; print_r($infoITPC); print "\n</pre>"; print "</body></html>"; ?>
Conclusion
Y'a plus qu'à comme qui dirait !
Si vous voyez quelque chose que j'ai loupé et qui va m'envoyer droit dans le mur, je vous invite à m'en faire part en commentaire, et vu la rapidité à laquelle j'avance mes projets il ne sera jamais trop tard ! merci