Problème de lecture EXIF

Résolu
GS Patton Messages postés 9 Date d'inscription mercredi 8 janvier 2014 Statut Membre Dernière intervention 13 janvier 2015 - Modifié par GS Patton le 8/01/2014 à 23:37
GS Patton Messages postés 9 Date d'inscription mercredi 8 janvier 2014 Statut Membre Dernière intervention 13 janvier 2015 - 9 janv. 2014 à 18:05
Bonjour à toutes et à tous,

J'ai commencé à créer une application avec Visual Studio 2012, permettant de lire les données EXIF d'une photo. Contrairement aux autres applications du genre, je ne souhaite lire que certaines infos, qui peuvent être ensuite exportées. Certaines fonctionnent, d'autres me posent problème.

J'ai des fonctions comme celle-ci :

Public Function focallength35mm(ByVal Path As String) As String
Dim img As Image = PictureBox1.Image
Dim prop As PropertyItem = img.GetPropertyItem(&HA405)
Dim longueurfocale35mm As String = System.Text.Encoding.ASCII.GetString(prop.Value, 0, prop.Len).TrimEnd(Chr(0))
Return longueurfocale35mm
End Function

Utilisées simplement comme ceci :

TextBox12.Text = CStr(focallength35mm(fichier))

Mais elles ne fonctionnent pas toutes, voici le résultat :

http://puu.sh/6egt0.JPG

J'ai bien entendu regardé dans les forums et autres après une solution, mais je n'ai rien trouvé d'intéressant.

Merci d'avance pour votre aide.

8 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2014 à 07:58
Bonjour,

Voir ce site pour plus de détail:

http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/EXIF.htm

Sinon voici un programme qui extrait les métadonnées de 2 manières:

http://codes-sources.commentcamarche.net/source/54411-metadonnees-exif-d-une-image-jpeg
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2014 à 08:00
0
GS Patton Messages postés 9 Date d'inscription mercredi 8 janvier 2014 Statut Membre Dernière intervention 13 janvier 2015
Modifié par GS Patton le 9/01/2014 à 11:45
Merci Le Pivert, mais j'ai déjà utilisé le programme que tu mentionnes, mon code ci-dessus vient de là. Et c'est justement le problème, c'est que ce code fonctionne pour une partie des données (celles qui se trouvaient dans le programme), mais pas pour la suite (que j'ai modifiée, comme ci-dessus), d'où ma question : que dois-je changer entre les lignes 1 et 6 pour que ça fonctionne ? C'est tout ce qu'il me reste pour que mon programme soit complet ;)

Pour le lien je l'ai déjà visité (enfin, la version active), mais n'y sont présents que les tags, pas la manière de les utiliser.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2014 à 12:14
Avec "GetPropertyItem", je n'ai pas réussi à le faire. C'est pour cela que je me suis servi de la dll ExifLibrary.
Donc avec ce programme tu peux récupérer les données contenu dans la listview comme ceci:

 Private Sub lvwexif_Click(sender As Object, e As System.EventArgs) Handles lvwexif.Click
Dim ligne As Integer
ligne = lvwexif.SelectedIndices(0).ToString
MsgBox(lvwexif.Items(ligne).SubItems(1).ToString)
End Sub

Ensuite avec la manipulation des chaines tu extrais ce qui t'intéresse.
0
GS Patton Messages postés 9 Date d'inscription mercredi 8 janvier 2014 Statut Membre Dernière intervention 13 janvier 2015
9 janv. 2014 à 12:42
Le problème que j'ai avec la listview (car j'ai essayé ça avant le "GetPropertyItem"), c'est que les infos de photos différentes ne seront pas toujours à la même place, donc je ne vois pas comment intégrer ces infos dans un label / textbox... peux tu m'aider pour cela ? Je peux t'envoyer le projets si tu le souhaites.

Pour le "GetProperty", d'après les erreurs ça viendrait du "As String", mais quand je mets autre chose, ça fonctionne encore moins ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2014 à 14:09
J'ai trouvé cela aussi si cela peut aider:

'http://msdn.microsoft.com/fr-fr/library/aa701005(v=vs.71).aspx
Imports System.Drawing.Imaging
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim image = New Bitmap("C:\chemin image.jpg")
'Get the PropertyItems property from image.
Dim propItems As PropertyItem() = image.PropertyItems
Dim encoding As New System.Text.ASCIIEncoding()
Dim manufacturer As String = encoding.GetString(propItems(1).Value)
MsgBox( _
"The equipment make is " + manufacturer + ".")
End Sub
End Class

0
GS Patton Messages postés 9 Date d'inscription mercredi 8 janvier 2014 Statut Membre Dernière intervention 13 janvier 2015
9 janv. 2014 à 14:18
Je teste et je reviens vers toi ;)
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2014 à 14:50
Le problème que j'ai avec la listview (car j'ai essayé ça avant le "GetPropertyItem"), c'est que les infos de photos différentes ne seront pas toujours à la même place

Voici un moyen de rechercher dans une listview une donnée et la sélectionner:

 Private Sub cmdfind(ByVal metadonnee As String)
Dim lastSearch As String
Dim lastIndex As Integer = -1
Dim searchText As String = metadonnee
Dim lvItem As ListViewItem = Nothing

'nettoyer items sélectionnés
If (lvwexif.SelectedItems.Count > 0) Then
lvwexif.SelectedItems(0).Selected = False
End If
'vérifier si le lastSearch est le même que l'actuel
'Vérifiez également si nous avons atteint le dernier élément
'a la deuxième vérification, lastIndex <listView.Items.Count - 1, fait en sorte de ne pas
'aller au-delà des indices de la listview
'la façon dont elle est maintenant, si nous atteignons le dernier élément de la recherche il va revenir au
'premier point
If searchText = lastSearch And lastIndex < lvwexif.Items.Count - 1 Then
'Nous avons besoin de continuer là où nous nous sommes quittés,
' recherche 1 devant où nous l'avons trouvé;», la position du même nom
lvItem = lvwexif.FindItemWithText(searchText, False, lastIndex + 1)
Else
'lancer la recherche depuis le début
lvItem = lvwexif.FindItemWithText(searchText, False, 0)
End If
lastSearch = searchText
If Not (lvItem Is Nothing) Then
lastIndex = lvItem.Index
lvwexif.Focus()
lvItem.Selected = True
lvwexif.TopItem = lvItem
End If
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
cmdfind("FocalLength")
Dim ligne As Integer
ligne = lvwexif.SelectedIndices(0).ToString
MsgBox(lvwexif.Items(ligne).SubItems(1).ToString)
End Sub

Ensuite à toi de faire une manipulation de chaine pour récupérer les éléments qui t'intéresse pour les mettre dans un textBox
0
GS Patton Messages postés 9 Date d'inscription mercredi 8 janvier 2014 Statut Membre Dernière intervention 13 janvier 2015
9 janv. 2014 à 15:13
Le bout de code juste avant ne fonctionne pas non plus, enfin juste pour certaines infos. Je vais essayer ta dernière solution, et je reviens vers toi. Par contre, cela marche-t-il pour des listview avec 2 colonnes, ou y a-t-il des paramètres à modifier ?

Encore merci
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2014 à 17:06
J'ai fait ce code sur mon programme Métadonnées Exif et cela fonctionne parfaitement. Il suffit de l'adapter en remplaçant le MsgBox par une variable et ne garder que les infos nécessaires

http://codes-sources.commentcamarche.net/source/54411-metadonnees-exif-d-une-image-jpeg
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
9 janv. 2014 à 17:29
J'ai rectifié le code pour avoir directement les données

 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
cmdfind("FocalLength")
Dim ligne As Integer
ligne = lvwexif.SelectedIndices(0).ToString
MsgBox(lvwexif.Items(ligne).SubItems(1).Text)
End Sub

Donc tu remplaces le MsgBox par ton TextBox ou Label
0
GS Patton Messages postés 9 Date d'inscription mercredi 8 janvier 2014 Statut Membre Dernière intervention 13 janvier 2015
9 janv. 2014 à 18:05
Effectivement, ça fonctionne bien dans ton programme, plus qu'à modifier pour mettre ça dans le mien

Merci ;)
0
Rejoignez-nous