Bonjour à tous,
Je cherche à récupérer les informations EXIF de fichiers JPEG (des photos).
Ces informations concernent :
1) l'auteur, la date, l'appareil photo utilisé, etc..
2) mais aussi un autre type de données telles que les données GPS qui pourraient y figurer.
J'ai trouvé un premier tuto: http://arkham46.developpez.com/artic...s/clexif/tuto/ qui me permet de récupérer les informations (1) auteur, date, etc. mais le code ne remonte aucune info GPS.
Je suis donc tombé sur un autre tuto, de Wayne Phillips http://www.everythingaccess.com/tuto...rom-JPEG-files qui lui me remonte uniquement les infos (2) GPS.
Ces codes fonctionnent tout d'eux avec un formulaire qui via un bouton permet de charger une image : un emplacement de fichier. Et ensuite les codes font l’extraction depuis cet emplacement, des EXIF vers des zones de texte.
Mon problème est que j'ai des milliers de photo à traiter et je dois récupérer TOUTES ces infos. C'est pourquoi j'aimerai adapter chacun de ces deux codes, afin qu'ils travaillent sur toute les lignes d'une table contenant le chemin des images, car actuellement ils ne travaillent que sur un seul fichier photo à la fois..
J'ai donc créé un fichier access neuf, sur lequel j'ai repris les deux codes existants ainsi que leurs formulaire. J'ai créé un table T_image avec les emplacement des images mais aussi les champs prêts à recevoir les EXIF.
Je viens chercher de l'aide pour m'aider à réaliser cet adaptation. D'après mes faible connaissance je pense qu'il faudrait créer une requête qui appellerait ces fonctions?
Cependant je ne sais pas du tout par quel bout m'y prendre: je ne sais pas si il faut que je commence par synchroniser les codes sur un seul formulaire (car la chacun fonctionne sur son formulaire)... et dans un second temps créer une requete pour travailler sur toute la table? ou alors, faut il faire deux requetes distinctes ?
Un extrait du premier code qui permet d'extraire les infos (1) auteur, date, etc.
Et maintenant le code de celui qui affiche les données GPS
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 Private Sub TFichier_AfterUpdate() ' Variable pour donnée brute Dim lData As Variant ' Gestion d'erreurs rapide On Error Resume Next ' Ouverture du nouveau fichier clex.OpenFile TFichier lData = clex.GetExifData(TagMakerNote) ' Taille de l'image ETaille.Value = clex.GetExifData(TagImageWidth) & " x " & clex.GetExifData(TagImageHeight) ' Vitesse ISO EISOSpeedRatings.Value = Format(clex.GetExifData(TagISOSpeedRatings), "\I\S\O 000") ' Modèle appareil EEquipModel.Value = clex.GetExifData(TagEquipModel) ' Fabricant EEquipMake.Value = clex.GetExifData(TagEquipMake) ' Version EXIF EExifVersion = clex.GetExifData(TagExifVersion) ' Description EImageDescription = clex.GetExifData(TagImageDescription) ' Auteur EArtist = clex.GetExifData(TagArtist) ' Date du cliché EDateTimeOriginal.Value = Format(clex.GetExifData(TagDateTimeOriginal), "d mmmm yyyy" & vbCrLf & "hh:nn:ss") ' Miniature Me.Image0.Picture = "" Me.Image0.PictureData = clex.GetExifData(TagThumbnailData) ' Temps exposition ' On stock d'abord le résultat dans lData lData = clex.GetExifData(TagExposureTime) ' On obtient un tableau de 2 valeurs If Not IsNull(lData) Then If lData(1) > lData(0) Then ' Temps inférieur à 1 secondes EExposureTime.Value = "1/" & Int(lData(1) / lData(0)) & " secondes" Else ' Temps supérieur ou égal à 1 secondes EExposureTime.Value = Int(lData(0) / lData(1)) & " secondes" End If Else EExposureTime.Value = Null End If ' Point -F lData = clex.GetExifData(TagFNumber) If Not IsNull(lData) Then EFNumber.Value = Format(lData(0) / lData(1), "F0.0") Else EFNumber.Value = Null End If ' Flash lData = clex.GetExifData(TagFlash) If Not IsNull(lData) Then EFlash.Value = IIf(Mid(lData, 8, 1) = "1", "Flash déclenché", "Flash non déclenché") EFlash.Value = EFlash.Value & 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.Value = EFlash.Value & vbCrLf & Switch(Mid(lData, 2, 1) = "0", "Anti-Yeux rouges désactivé", _ Mid(lData, 2, 1) = "1", "Anti-Yeux rouges activé") Else EFlash.Value = Null End If End Sub
Les infos que je dois donc récupérer et rajouter dans la table via la requete sont :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 Private Sub btnBrowseAndOpen_Click() On Error GoTo ExifError Dim strDump As String txtOutput.Value = "" ' Clear the output before starting. With GPSExifReader.BrowseAndOpenFile() strDump = strDump & "FilePath: " & .FilePath & vbCrLf strDump = strDump & "DateTimeOriginal: " & .DateTimeOriginal & vbCrLf strDump = strDump & "GPSVersionID: " & .GPSVersionID & vbCrLf strDump = strDump & "GPSLatitudeDecimal: " & .GPSLatitudeDecimal & vbCrLf strDump = strDump & "GPSLongitudeDecimal: " & .GPSLongitudeDecimal & vbCrLf strDump = strDump & "GPSAltitudeDecimal: " & .GPSAltitudeDecimal & vbCrLf txtOutput.Value = strDump End With Exit Sub ExifError: MsgBox "An error has occurred in btnBrowseAndOpen_Click():" & vbCrLf & vbCrLf & Err.Description End Sub
Pour le premier code: EExposureTime ;EFNumber ; etc.
Pour le deuxième code: .GPSAltitudeDecimal ; .GPSLongitudeDecimal ; .GPSVersionID
En vous remerciant par avance pour votre aide, infos, piste
J'ai mis une version en 2002 et une version 2007-16 du fichier dans le zip
zunk
Partager