Vous connaissez forcément les données EXIF, qui permettent de tout savoir d'une photographie prise avec un appareil photo numérique (tout - ou plutôt l'essentiel). Comment les récupérer automatiquement et les afficher sur votre photoblog ?
Cet article prend 6 minutes à lire et comporte 1321 mots.
Quand on affiche une photo dans un article, on n’a pas forcément l’utilité des données de prise de vue – en général. Il est même conseillé d’en supprimer certaines, dont les données de géolocalisation avant de publier vos photos personnelles sur le web.
Mais pour vous qui tenez un blog photo, les données EXIF peuvent avoir de l’importance. Soit que vous souhaitiez donner des informations techniques à vos lecteurs, soit qu’elles permettent de mieux comprendre la photographie elle-même.
À à f/1.8, la profondeur de champ d’un 20mm n’est pas la même que celle d’un 80mm, par exemple. De même, certains objectifs ont un rendu plus mou que d’autres. Une correction de l’exposition aura permis de réaliser un superbe contre-jour.
Mais comment extraire ces données, sans aller les chercher manuellement, photo par photo ? Vous avez deux possibilités : un traitement « brut » en PHP que vous ajoutez dans un thème enfant, ou vous passez par une extension dédiée. Moins souple, mais plus simple et plus rapide. Une extension existe, et en plus elle est gratuite…
Récupérer et afficher les données EXIF avec exifography
L’extension n’est pas testée avec la dernière version de WordPress (5.03 à ce jour). Ceci dit, elle fonctionne parfaitement, ce qui n’est pas surprenant quand on sait que sa créatrice, Kristen Symonds, alias kristarella travaille en tant qu’ingénieur pour Automattic, la société éditrice de WordPress – un code de qualité ne se périme pas du jour au lendemain.
Passons sur l’installation et l’activation, très simples – cliquez sur Extensions > Ajouter, saisissez « exifography » dans le champ de recherche, validez, cliquez sur installer maintenant puis sur activer l’extension.
En cliquant sur Réglages > Exifography, vous arrivez sur la page des options de l’extension :
Par défaut, les balises sont li
, que j’ai remplacé par div
et span
. J’ai même rajouté une balise <span class="exif-name">
qui enveloppe l’élément EXIF, puis j’ai ajusté le style via les CSS.
À savoir : l’id de la balise ul
(ou div
dans mon cas) est de forme wp-image-ID
; pour éviter d’avoir deux id identiques et donc un conflit, vous pouvez remplacer <div id="%s" class="exif">
par <div id="exifography-%s" class="exif">
dans les options, ce qui vous donnera une id exifography-wp-image-ID
.
Voici le résultat :
<div id="wp-image-1462" class="exif"> <span class="aperture"><span class="exif-name">Ouverture :</span> ƒ/2.8</span> <span class="camera"><span class="exif-name">Appareil photo :</span> DMC-XS1</span> <span class="focal_length"><span class="exif-name">Focale :</span> 4.3mm</span> <span class="iso"><span class="exif-name">ISO :</span> 400</span> <span class="shutter_speed"><span class="exif-name">Vitesse d'obturation :</span> 1/8s</span> </div>
Le grand avantage de cette extension, c’est sa souplesse et sa facilité d’utilisation. L’inconvénient, c’est qu’elle ne permet pas une grande personnalisation, et n’affiche que certaines données EXIF.
C’est là que vous souhaiterez…
Récupérer et afficher les données en créant une fonction personnalisée
Si vos besoins vont au-delà de l’affichage des données EXIF en dessous de l’image, vous pouvez programmer votre propre fonction en PHP, puis l’intégrer dans le fichier functions.php
de votre thème, ou mieux, en passant par une extension telle que Code Snippets.
Pour afficher les données EXIF de l’image à la Une sur sur un photoblog, par exemple, j’ai utilisé le code suivant :
$imgID = get_post_thumbnail_id(); // ID de l'image à la Une $datas = wp_get_attachment_metadata( $imgID ); // les métadonnées du média
Ces deux lignes sont les plus importantes, car maintenant vous avez toutes les données associées à votre média, dont les données EXIF. Reste à les récupérer, dans l’index ['image_meta']
du tableau $datas
.
Vous allez obtenir un tableau de ce type :
'image_meta' => Array ( 'aperture' => 5, 'credit' => '', 'camera' => 'Canon EOS-1Ds Mark III', 'caption' => '', 'created_timestamp' => 1323190643, 'copyright' => '', 'focal_length' => 35, 'iso' => 800, 'shutter_speed' => 0.016666666666667, 'title' => '' )
Pour la vitesse d’obturation, si vous voulez l’afficher avec un format type 1/250 s, il vous faudra effectuer le calcul suivant :
echo '1/' . round(1/$datas['image_meta']['shutter_speed']) . ' s';
De même pour la date de la prise de vue (au format habituel défini sur le blog), il faudra passer par :
echo date_i18n ( get_option ( 'date_format' ), $datas ['image_meta'] ['created_timestamp'] );
Ce qui vous permettra d’afficher par exemple, pour le tableau donné ci-dessus :
Cette photographie a été prise le 6 décembre 2011 avec un Canon EOS-1Ds Mark III, un objectif de 35mm ouvert à f/5 avec une vitesse d’obturation de 1/60 s. La sensibilité du film était de 800 ISO.
Ici le code complet pour l’exemple précédent :
// fonction à ajouter dans functions.php ou mieux, via Code Snippets function my_add_exif() { global $post; $imgID = get_post_thumbnail_id ( $post->ID ); $datas = wp_get_attachment_metadata ( $imgID ); $metas = $datas['image_meta']; $camera = $metas['camera']; $focal = $metas['focal_length']; $aperture = round ( $metas['aperture'], 1 ); $speed = round ( 1 / $metas['shutter_speed'] ); $iso = $metas['iso']; $date = date_i18n ( get_option ( 'date_format' ), $metas['created_timestamp'] ); $output .= '<span>Cette photographie a été prise le <strong>' . $date . '</strong> avec un <strong'. $camera .'</strong>, un objectif de <strong>' . $focal . 'mm</strong> ouvert à <strong>f/' . $aperture . '</strong> avec une vitesse d&cute;obturation de <strong>1/' . $speed . ' s</strong>. La sensibilité du film était de <strong>' . $iso . ' ISO</strong>.</span>'; return $output; } // appel depuis le thème if (has_post_thumbnail ()) { echo my_add_exif (); }
Bien sûr, il s’agit d’une ligne directrice, il va falloir tester l’existence de chaque donnée, et construire la chaîne à afficher en fonctions des données enregistrées.
Vous allez également récupérer d’autres données sur votre photographie via fonction wp_get_attachment_metadata
dont les dimensions.Le poids peut être trouvé via la fonction PHP filesize
:
round ( filesize ( get_attached_file ( $imgID ) ) / 1048576, 1 );
Cette ligne de code vous donnera le poids, en Mo, avec une précision de 1 décimale. L’avantage d’une fonction personnalisée étant que vous avez une plus grande souplesse à l’utilisation, et que vous pourrez rajouter des données non EXIF mais pas moins intéressantes.
Vous pouvez voir ci-dessous un exemple d’utilisation de l’ensemble des données précitées, sur un photoblog :
Alternative intéressante à la fonction WordPress wp_get_attachment_metadata
, la fonction PHP exif_read_data
qui vous donne davantage d’informations, à traiter un peu différemment (mais rien d’extraordinaire).
Avec le code suivant :
var_export ( exif_read_data ( get_attached_file ( $imgID ) ) );
vous obtenez un tableau semblable à celui-ci :
array ( 'FileName' => 'yellow-flower-701988.jpg', 'FileDateTime' => 1465473486, 'FileSize' => 3475332, 'FileType' => 2, 'MimeType' => 'image/jpeg', 'SectionsFound' => 'ANY_TAG, IFD0, EXIF', 'COMPUTED' => array ( 'html' => 'width="4608" height="3456"', 'Height' => 3456, 'Width' => 4608, 'IsColor' => 1, 'ByteOrderMotorola' => 1, 'ApertureFNumber' => 'f/2.8', ), 'Make' => 'Panasonic', 'Model' => 'DMC-XS1', 'ExposureTime' => '10/80', 'FNumber' => '28/10', 'ISOSpeedRatings' => array ( 0 => 400, 1 => 0, ), 'DateTimeOriginal' => '2015:03:31 17:18:52', 'Flash' => array ( 0 => 16, 1 => 0, ), 'FocalLength' => '43/10', )
En une seule passe, vous avez les données EXIF, la taille, le poids. À vous de traiter, et d’organiser ensuite, à votre guise.
En conclusion
Si vous souhaitez un affichage basique de vos données EXIF, exifography fera parfaitement l’affaire.
Cependant, si vous souhaitez aller plus loin, alléger votre site WordPress, vous affranchir des extensions ou des fonctions intégrées à votre thème, la création d’une fonction personnalisée n’est pas hors de portée, pour peu que vous ayez quelques connaissances en PHP.
Le Codex WordPress et le Code Reference vous aideront à aller plus loin, à approfondir votre connaissance de WordPress en mettant les mains dans le cambouis !
WordPress est un outil fascinant, avec une communauté de passionnés, et vous trouverez toujours le bout de code qu’il vous faut, une explication à défaut de solution toute prête en cas de problème, et même des consultants à prix abordable.
Alors lancez-vous, affichez vos données EXIF avec vos photographies, la valeur ajoutée est loin d’être négligeable !
Et vous, affichez-vous les données EXIF de vos photos ? Utilisez-vous une autre extension, ou du code « maison » ?