Exchangeable Image File Format (Exif)

www.altova.com Agrandir/Réduire tout Imprimer cette rubrique Page précédente Un niveau supérieur Page suivante

Accueil >  Objets/fonctions du design > Images >

Exchangeable Image File Format (Exif)

Exchangeable image file format (Exif) est un standard qui définit les formats d'image utilisés par certains appareils photos numériques et appareils photos de smartphones. Les balises de métadonnées du standard Exif présentent une large palette d'informations comme par exemple la date et l'heure de la photo ainsi que ses données de géolocalisation, les paramètres de l'appareil photo et des détails de composition de l'image. Lorsqu'une image Exif est convertie en encodage Base64, les métadonnées dans l'image sont également converties en Base64 et sont disponibles à l'extraction.

 

Note :Les appareils photos numériques et appareils photos de smartphones ne fournissent pas tous de données Exif.

 

Fonctions Exif de MobileTogether Designer

MobileTogether Designer propose les fonctions Exif suivantes :

 

L'action Laisser l'utilisateur choisir l'image propose une option qui démarre l'application de l'appareil photo sur l'appareil client de l'utilisateur final. La photo prise est enregistrée dans un nœud XML en tant qu'image encodée en Base64. Si l'application de l'appareil photo utilise le format Exif, les métadonnées Exif sont également enregistrées dans l'image encodée en Base64. Ces données sont disponibles pour une extraction immédiate depuis le nœud XML.
Une fonction d'extension XPath Altova nommée image-exif-data prend un string Base64 en tant que son argument et retourne toutes les métadonnées Exif contenues dans le string en tant que paires attribut-valeur. (Voir la description de la fonction image-exif-data pour plus de détails.)
Une fonction d'extension XPath Altova nommée suggested-image-file-extension prend un string Base64 en tant que son argument, parse les métadonnées Exif et les métadonnées alternatives pour le type de fichier d'image et retourne une extension de fichier d'image (comme jpg, png, bmp). Cela est utile pour la détection automatique du format d'image correct et pour enregistrer le fichier avec une extension de fichier appropriée.
L'action Charger/Enregistrer Image sur le fichier permet d'enregistrer une image encodée en Base64 dans un format d'image binaire (comme jpg, png, bmp). Les données Exif sont sauvegardées dans le texte encodé en Base64.

 

L'exemple ci-dessous explique comment extraire les données Exif depuis une image encodée en Base64 et comment ces données peuvent être utilisées dans une solution.

 

Note :Les données Exif seront perdues si l'image est redimensionnée ou tournée.

 

Fichier d'exemple : Base64Images.mtd

Le fichier de design Base64Images.mtd est situé dans votre dossier MobileTogether (Mes) Documents : MobileTogetherDesignerExamples\Tutorials\Images. Vous pouvez ouvrir ce fichier dans MobileTogether Designer, l'exécuter dans le simulateur (F5) et consulter les définitions de design. Le fichier par défaut du design contient une image avec des métadonnées Exif.

 

 

Click to expand/collapseDesign de base

 

Le fichier de design utilise des images encodées en Base64 qui sont stockées dans le fichier XML Base64Images.xml (qui se trouve également dans le dossier Tutorials\Images). La structure du fichier XML est montrée dans la capture d'écran ci-dessous. L'élément images comporte cinq éléments enfants. Chacun d'entre eux comporte une image de format différent stockée en tant que string Base64. L'arborescence $PERSISTENT est utilisée pour enregistrer des sélections d'utilisateur temporaires (ComboBoxValue) et les données Exif de l'image sélectionnée, si ces données existent.

Elle contient une image avec des métadonnées Exif (l'élément exif). L'arborescence $PERSISTENT est utilisée pour enregistrer des sélections d'utilisateur temporaires (ComboBoxValue) et des métadonnées Exif (ExifData).

MTDBase64ImagesTut01

La partie supérieure du design (capture d'écran ci-dessous) a un libellé pour le titre de page et deux tables. Le design de cette partie de la page est décrit dans la section précédente, les Images encodées en Base64. Le but est de permettre à l'utilisateur final de choisir un type d'image dans la liste de choix. Cette sélection détermine quelle image encodée en Base64 est sélectionnée dans le fichier XML pour un affichage dans la cellule à la droite de la liste de choix.

MTDBase64ImagesTut02Design

Si l'utilisateur choisit l'élément exif dans la liste de choix, l'image encodée en Base64 dans l'élément exif du fichier XML s'affichera. Les métadonnées Exif sont affichées dans deux tables ("Selected Exif data of image" et "Exif metadata of the selected image"; voir simulateur dans la capture d'écran ci-dessous). Dans le simulateur, si vous élargissez l'arborescence $PERSISTENT dans le panneau de Données XML (voir capture d'écran ci-dessous), vous verrez les données Exif qui ont été extraites des strings Base64. Le design des deux tableaux d'affichage des données Exif est décrit ci-dessous. Voir la section précédente, Images encodées en Base64 pour une description détaillée des autres parties du design.

Click to expand/collapse

 

 

Click to expand/collapseDonnées sélectionnées Exif de l'image

 

Les données Exif sélectionnées sont présentées dans un tableau statique consistant en deux colonnes et plusieurs lignes (capture d'écran ci-dessous).
La première colonne contient des libellés ; la deuxième colonne contient des champs d'éditions. Chaque colonne a une expression XPath qui retourne une métadonnée Exif.
 
Click to expand/collapse
 
L'information Type d'image est obtenue depuis le string de texte encodé en Base64 en utilisant la fonction d'extensions XPath Altova suggested-image-file-extension. Cette fonction prend un string (l'image Base64) en tant que son argument et extrait l'information d'extension de fichier depuis le string. Si aucune information d'extension de fichier n'est disponible dans le string Base64, la fonction retourne le string vide. L'expression XPath utilisée est:
 
for $k in suggested-image-file-extension($XML1/images/element()[local-name() eq $PERSISTENT/Root/ComboBoxValue]) 
return if ($k != ''then $k else "Data not available" 
 
L'expression fournit des strings de retour alternatifs selon que la fonction retourne un string non-vide ou un string vide. Si elle retourne un string non-vide, le string sera affiché ; si elle retourne un string vide, un message approprié sera affiché.
Toutes les autres expressions XPath dans la table (sauf la première ligne) utilisent la fonction d'extension XPath Altova image-exif-data pour obtenir une métadonnée Exif. Cette fonction prend un string (l'image Base64) en tant que son argument et retourne un nœud d'élément (nommé Exif) avec des attributs conservant les métadonnées Exif. Chaque paire de valeur d'attribut correspond à une balise de métadonnées Exif. Dans l'expression ci-dessous, la fonction image-exif-data retourne l'élément Exif avec plusieurs attributs. L'information de métadonnées que nous souhaitons obtenir avec cette expression est la largeur de l'image. Cette information est stockée dans le nœud d'attribut @PixelXDimension de l'élément Exif.
 
for $k in $PERSISTENT/Root/ExifData/Exif 
return if ($k/@PixelXDimension !=''then $k/@PixelXDimension else "Data not available" 
 
L'expression contrôle si le nœud Exif/@PixelXDimension est non-vide ou vide. S'il est non-vide, le string est affiché ; sinon, un message approprié est affiché.
Pour plus d'informations concernant la fonction image-exif-data, voir sa description dans la section des fonctions d'extension Altova.
Veuillez noter la dernière valeur de Géolocalisation dans la table. Elle est obtenue via un attribut Exif/@Geolocation créé par Altova.
Le nœud $PERSISTENT/Root/ExifData est rempli avec les données Exif en y ajoutant un nœud enfant qui contient le résultat de la fonction image-exif-data. Pour ce faire, spécifier une action Ajouter nœud dans la liste de choix qui sélectionne quelle image afficher (voir capture d'écran ci-dessous). L'action est déclenchée par l'événement ÉditionÀLaFin de la liste de choix.
 
MTDExifTut02
 
Veuillez noter les points suivants :
(i) L'expression de localisation XPath dans l'action Ajouter nœud localise le nœud dans le fichier XML qui porte le même nom que le string dans $PERSISTENT/Root/ComboBoxValue.
(ii) Le nœud $PERSISTENT/Root/ExifData est supprimé avant que les données Exif (dans le nœud Exif) soient ajoutées à ExifData.
(iii) Une action de page a été définie pour supprimer le nœud Exif dans l'arborescence $PERSISTENT. Cela permet d'éviter toute incompatibilité éventuelle entre l'image initiale (jpg) et une vieille donnée Exif dans le nœud ExifData.

 

 

 

Click to expand/collapseToutes les données Exif de l'image

 

Une table avec une ligne répétitive (capture d'écran du design en bas à gauche ; affichage du simulateur en bas à droite) est utilisée pour afficher toutes les paires de valeurs d'attribut retournées par la fonction image-exif-data.
La ligne répétitive est spécifiée avec une expression XPath qui choisit tous les attributs du nœud d'élément Exif retourné par la fonction image-exif-data :
$PERSISTENT/Root/ExifData/Exif/@*.
 

MTDExifTut03     MTDExifTut04
 

 

La première colonne de la table contient la position d'index de l'attribut actuel : index-of(../@*/name(), ./name() )
La deuxième colonne contient le nom de l'attribut actuel : name(.)
La troisième colonne contient la valeur de l'attribut actuel : current()
Toutes les images ne contiennent pas les mêmes métadonnées Exif. Dans certains cas, certaines métadonnées peuvent être absentes ; dans d'autres cas, des métadonnées supplémentaires peuvent être présentes ; ou bien, des métadonnées peuvent être balisées avec des balises non standardisées et spécifiques au vendeur. Par conséquent, il est important de savoir quelles métadonnées sont disponibles et sous quels noms d'attribut. Ce n'est qu'avec ces informations que des valeurs d'attribut spécifiques pourront être extraites.
Si nous connaissons les noms des attributs qui sont retournés, nous pouvons accéder à sa valeur en utilisant la fonction image-exif-data de la sorte : image-exif-data(Base64String)/@WantedAttribute. Veuillez noter que la fonction retourne l'élément Exif.

 

 

 

Click to expand/collapseRemplir l'arborescence $PERSISTENT avec des données Exif

 

Il peut s'avérer utile de voir toutes les paires de valeur d'attribut retournées par la fonction image-exif-data. Pour afficher les paires de valeur d'attribut, nous pouvons simplement stocker cette sortie de manière dans l'arborescence temporaire $PERSISTENT.
Dans notre design d'exemple, le nœud $PERSISTENT/Root/ExifData est rempli avec les données Exif en ajoutant un nœud enfant au nœud ExifData qui contient le résultat de la fonction image-exif-data.
Pour ce faire, spécifier une action Ajouter nœud sur la liste de choix qui sélectionne quelle image afficher (voir capture d'écran ci-dessous). L'action Ajouter nœud est déclenchée par l'événement ÉditionÀLaFin de la liste de choix.
 
MTDExifTut02
 
L'expression de localisation XPath dans l'action Ajouter nœud localise le nœud dans le fichier XML qui porte le même nom que le string dans $PERSISTENT/Root/ComboBoxValue.
Le nœud $PERSISTENT/Root/ExifData est supprimé avant que les données Exif retournées par la image-exif-data fonction soient ajoutées au nœud ExifData.
Si nous connaissons les noms des attributs qui sont retournés, nous pouvons accéder à la valeur de tout attribut en utilisant la fonction image-exif-data de la sorte : image-exif-data(Base64String)/@WantedAttribute. Veuillez noter que la fonction retourne l'élément Exif.

 


 


© 2019 Altova GmbH