Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

Developpez.com - Access
X

Choisissez d'abord la catégorieensuite la rubrique :


ACCESS : Classe de gestions des données EXIF

Date de publication : 25/06/06. Date de mise à jour : 19/03/08.

Par Thierry GASPERMENT (arkham46.developpez.com/)
 

Ce document a pour objectif de décrire les propriétés et fonctions de la classe ClEXIF.
La classe quant à elle a pour objectif d'accéder aux données EXIF des images.

Attention : la classe clExif n'est plus maintenue.
Les données Exif peuvent être lue avec la classe clGdiplus.

       Version PDF (Miroir)   Version hors-ligne (Miroir)
Viadeo Twitter Facebook Share on Google+        



I. Que sont les données EXIF?
II. Prérequis
III. Compatibilité
IV. Les fonctions
IV-A. OpenFile
IV-B. CloseFile
IV-C. GetExifData
IV-D. SetExifData
IV-E. SaveFile
IV-F. SaveJpegLossLess
V. Lecture des tags
V-A. Généralités
V-B. Cas particuliers
VI. Écriture des tags
VII. Les téléchargements


I. Que sont les données EXIF?


Les données Exif sont des informations stockées dans un fichier Jpeg (ou TIFF).

Elles sont très largement utilisées par les appareils photo numériques pour stocker des informations telles que :
- la date et l'heure du cliché ;
- une miniature de l'image pour prévisualisation rapide ;
- la vitesse ISO ;
- le modèle de l'appareil ;
- le fabricant de l'appareil ;
- le temps d'exposition ;
- l'utilisation du flash lors de la prise de la photo
- ...

Pour lire ces données on utilisera la librairie Gdi+ de Microsoft.
Elle est intégrée à Windows XP et s'installe très facilement pour les autres versions de Windows.

EXIF est une Norme, disponible ici : Lien vers la norme

Cette classe utilise la norme 2.2.
Si vos images utilisent une autre norme (voir tag TagExifVersion), il vaut mieux faire un test avant de modifier l'image.


II. Prérequis

Il est nécessaire de posséder la librairie GDI+ de Microsoft.
Cette librairie est incorporée à Windows XP.
La librairie est en téléchargement pour les systèmes d'exploitation suivants (Windows 2000; Windows 98; Windows ME; Windows NT; Windows XP) :

Lien vers la libraire en téléchargement sur Microsoft.com
Le fichier gdiplus.dll peut être dans le répertoire système ou dans le répertoire de l'application.


III. Compatibilité

Cette classe a été testée sur :
- Access 97 + Windows 2000 Pro ;
- Access 2000 + Windows 98 ;
- Access 2003 + Windows XP Home.


warning Attention cependant, la documentation est écrite en utilisant des énumérations qui n'existent pas sous Access 97.
Si vous utilisez Access 97, remplacez les énumérations par des propriétés.

Par exemple :

' Pour Access 2000 et plus
    EEquipModel.Value = clex.GetExifData(TagEquipModel)
' Devient pour Access 97
    EEquipModel.Value = clex.GetExifData(Clex.TagEquipModel)

IV. Les fonctions


IV-A. OpenFile

Ouvre le fichier en lecture.

Il faut d'abord ouvrir le fichier à l'aide de cette fonction pour accéder aux données Exif.
Pensez à refermer ensuite le fichier avec la fonction CloseFile.

La fonction renvoie Vrai si le fichier a pu être ouvert.

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier image

IV-B. CloseFile

Ferme le fichier.

Pensez à refermer le fichier lorsque la lecture/écriture des données est terminée.

Seul un fichier peut être ouvert à la fois : la fonction CloseFile n'a donc pas besoin de paramètre pour le fichier.


IV-C. GetExifData

Lit la donnée Exif spécifiée par le tag pTag.

Le tag est un identifiant de la donnée que l'on veut lire.
La liste exhaustive des tags est disponible dans la norme (il y en a beaucoup, on ne les détaillera pas tous).

Il faut d'abord ouvrir le fichier à l'aide de la fonction OpenFile pour accéder aux données Exif.

La fonction renvoie la valeur de la donnée.
Le type de donnée dépend du tag.

Paramètres :


Paramètre Type Explication
pTag Long Nom du tag Exif

Les codes des tags les plus courants sont accessibles via :


- des propriétés de la classe en Access 97 :
Type d'appareil

dim lData as String
' Lecture du Tag
lData = ClEx.GetExifData(Clex.TagEquipModel)
                
- des énumérations à partir de Access 2000 :
Balance des blancs

dim lData as String
' Lecture du Tag
lData = ClEx.GetExifData(TagEquipModel)
                


Si un tag n'est pas défini dans la classe il est possible de lire sa valeur en passant directement son code en paramètre (les valeurs sont données dans la norme).

Le type de valeur renvoyée par la fonction dépend du tag.



IV-D. SetExifData

Modifie la valeur d'une donnée Exif.

Il faut d'abord ouvrir le fichier à l'aide la fonction OpenFile pour modifier les données Exif.

La donnée Exif est modifiée en mémoire.
Le fichier n'est pas immédiatement modifié.
Utilisez la fonction SaveFile pour sauvegarder l'image et ses données modifiées.

Pensez à refermer ensuite le fichier avec la fonction CloseFile.

La fonction renvoie Vrai si la donnée Exif a pu être modifiée.

Paramètres :


Paramètre Type Explication
pTag Long Nom du tag Exif
pValue Variant Valeur de la donnée Exif

Voir la section Écriture des tags pour la liste des Tags modifiables.


IV-E. SaveFile

Sauvegarde le fichier courant au format Jpeg.

Les modifications apportées aux données Exif sont enregistrées.

La fonction renvoie Vrai si le fichier a pu être sauvegardé.

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier de sauvegarde.
Il n'est pas possible d'écraser le fichier courant.
[pQuality]=-1 Integer Qualité Jpeg (0-100)
Ne spécifiez pas ce paramètre pour garder la qualité de l'image d'origine.

IV-F. SaveJpegLossLess

Sauvegarde l'image dans un fichier sans recompresssion

Pas de paramètre de qualité, l'image n'est pas recompressée.
(Pas de perte due à la compression si les dimensions de l'image sont des multiples de 16.)

Paramètres :


Paramètre Type Explication
pFile String Chemin du fichier de sauvegarde.
Il n'est pas possible d'écraser le fichier courant.
Function de changement de la date du cliché

' Change le tag DateTimeOriginal d'une image
Public Function ChangeImageDateTime(ByVal pPath As String, ByVal pDate As Date) As Boolean
    Dim clEx As clExif
    On Error GoTo Gestion_Erreurs
    ' Création nouvelle instance de classe
    Set clEx = New clExif
    ' Ouverture du fichier
    clEx.OpenFile pPath
    ' Exif : Mise à jour de la date du cliché
    If clEx.SetExifData(TagDateTimeOriginal, pDate) Then
        ' Sauvegarde de l'image dans un autre fichier
        If clEx.SaveJpegLossLess(pPath & ".backup") Then
            ' Fermeture du fichier initial
            clEx.CloseFile
            ' Supprime le fichier original
            Kill pPath
            ' Renomme l'image avec le nom d'origine
            Name pPath & ".backup" as  pPath
            ChangeImageDateTime = True
         End If
    End If
    ' Libère l'instance de classe
    Set clEx = Nothing
    On Error GoTo 0
    Exit Function
Gestion_Erreurs:
    Set clGdip = Nothing
    ChangeImageDateTime = False
End Function
				

V. Lecture des tags


V-A. Généralités

Le format des données lues est celui de la norme Exif.

Si plusieurs valeurs sont renvoyées, elles le sont sous la forme d'un tableau.
Pour accéder aux données :

Plusieurs valeurs dans un même tag

dim lData as variant
dim lVal1
dim lVal2
' Lecture du Tag
lData = ClEx.GetExifData(MonTag)
' Première valeur
lVal1 = lData(0)
' Deuxième valeur
lVal2 = lData(1)
...
				

Type Rationel :
Ce type de données consiste en un tableau de deux valeurs correspondant au numérateur et au dénominateur de la fraction.

Lecture du temps d'exposition

dim lData as variant
' Lecture du Tag
lData = clex.GetExifData(TagExposureTime)
' lData = Null si le tag n'est pas renseigné
If Not IsNull(lData) Then
' Transformation du rationnel est une chaîne de caractères
    If lData(1) > lData(0) Then
    	' Pour un temps d'exposition de 1/60e de seconde
    	' lData(0) = 10
    	' lData(1) = 600
        EExpo.Value = "1/" & Int(lData(1) / lData(0)) & " secondes"
    Else
    	' Pour un temps d'exposition de 8 secondes
    	' lData(0) = 800
    	' lData(1) = 100
        EExpo.Value = Int(lData(0) / lData(1)) & " secondes"
    End If
End If
				

V-B. Cas particuliers


Les dates :
Les tags TagDateTimeOriginal (date du cliché) et TagDateTimeDigitized (date de génération du fichier) renvoient directement une valeur convertie en type Date.

Le Flash :
Le tag TagFlash renvoie une chaîne de caractères de 8 de long représentant un nombre binaire.
(Voir la norme pour plus d'information.)
Lecture des infos du flash

dim lData as variant
' Lecture du Tag
lData = clex.GetExifData(TagFlash)
' EFlash est une zone de texte
' Déclenchement du flash (bit 0)
EFlash = EFlash & IIf(Mid(lData, 8, 1) = "1", "Flash déclenché", "Flash non déclenché")
' Mode du flash (bit 3 et 4)
EFlash = EFlash & vbCrLf & Switch(Mid(lData, 4, 2) = "00", "Mode inconnu", _
                                  Mid(lData, 4, 2) = "01", "Flash forcé", _
                                  Mid(lData, 4, 2) = "10", "Flash désactivé", _
                                  Mid(lData, 4, 2) = "11", "Flash auto")
' Anti-Yeux rouges (bit 6)
EFlash = EFlash & vbCrLf & Switch(Mid(lData, 2, 1) = "0", "Anti-Yeux rouges désactivé", _
                                      Mid(lData, 2, 1) = "1", "Anti-Yeux rouges activé")
				

La miniature intégrée :
Les images contiennent parfois une miniature intégrée au fichier.

C'est le cas des photos prises par les appareils numériques : la miniature est utile pour afficher rapidement une prévisualisation de l'image.

Le tag TagThumbnailData renvoie une valeur que l'on peut directement affecter à la propriété PictureData d'un contrôle Image.
Lecture de la miniature intégrée

' Image0 est un contrôle image standard
' Le Tag ThumbnailData renvoie un tableau de données qui peut être directement affecté à une image				
Me.Image0.PictureData = clex.GetExifData(TagThumbnailData)
				

VI. Écriture des tags

Pour l'instant peu de tags sont modifiables.

Vérifiez que votre image est à la norme Exif 2.2 (Tag ExifVersion = 0220) avant de modifier une image.
L'écriture d'un tag fonctionne avec une norme différente de 2.2 mais il vaut mieux tester avant.

Tags modifiables :

Tag Type Explication
TagDateTimeOriginal Date Date du cliché.
TagImageDescription String Description de l'image.
TagArtist String Auteur de la photo.
TagOrientation Integer Orientation de la photo.
TagThumbnailOrientation Integer Orientation de la miniature.


VII. Les téléchargements

Télécharger la classe au format texte (HTTP)

Ensuite insérez le contenu du fichier dans un module de classe.




               Version PDF (Miroir)   Version hors-ligne (Miroir)

Valid XHTML 1.0 TransitionalValid CSS!

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © Thierry GASPERMENT. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Responsables bénévoles de la rubrique Access : Pierre Fauconnier - Arkham46 -