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.
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.
|
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 :
EEquipModel. Value = clex. GetExifData (TagEquipModel)
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
lData = ClEx. GetExifData (Clex. TagEquipModel )
|
- des énumérations à partir de Access 2000 :
Balance des blancs |
dim lData as String
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 |
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é |
Public Function ChangeImageDateTime (ByVal pPath As String , ByVal pDate As Date ) As Boolean
Dim clEx As clExif
On Error GoTo Gestion_Erreurs
Set clEx = New clExif
clEx. OpenFile pPath
If clEx. SetExifData (TagDateTimeOriginal, pDate) Then
If clEx. SaveJpegLossLess (pPath & " .backup " ) Then
clEx. CloseFile
Kill pPath
Name pPath & " .backup " as pPath
ChangeImageDateTime = True
End If
End If
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
lData = ClEx. GetExifData (MonTag)
lVal1 = lData (0 )
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
lData = clex. GetExifData (TagExposureTime)
If Not IsNull (lData) Then
If lData (1 ) > lData (0 ) Then
EExpo. Value = " 1/ " & Int (lData (1 ) / lData (0 )) & " secondes "
Else
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
lData = clex. GetExifData (TagFlash)
EFlash = EFlash & IIf (Mid (lData, 8 , 1 ) = " 1 " , " Flash déclenché " , " Flash non déclenché " )
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 " )
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 |
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
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 ni 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.