Problème de lecture EXIF [Résolu]

Messages postés
9
Date d'inscription
mercredi 8 janvier 2014
Dernière intervention
13 janvier 2015
- 8 janv. 2014 à 23:36 - Dernière réponse :
Messages postés
9
Date d'inscription
mercredi 8 janvier 2014
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.
Afficher la suite 

12 réponses

Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 9 janv. 2014 à 07:58
0
Merci
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
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 9 janv. 2014 à 08:00
Messages postés
9
Date d'inscription
mercredi 8 janvier 2014
Dernière intervention
13 janvier 2015
- Modifié par GS Patton le 9/01/2014 à 11:45
0
Merci
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.
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 9 janv. 2014 à 12:14
0
Merci
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.
Messages postés
9
Date d'inscription
mercredi 8 janvier 2014
Dernière intervention
13 janvier 2015
- 9 janv. 2014 à 12:42
0
Merci
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 ;)
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 9 janv. 2014 à 14:09
0
Merci
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

Messages postés
9
Date d'inscription
mercredi 8 janvier 2014
Dernière intervention
13 janvier 2015
- 9 janv. 2014 à 14:18
Je teste et je reviens vers toi ;)
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 9 janv. 2014 à 14:50
0
Merci
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
Messages postés
9
Date d'inscription
mercredi 8 janvier 2014
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
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 9 janv. 2014 à 17:06
0
Merci
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
Messages postés
5531
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 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
Messages postés
9
Date d'inscription
mercredi 8 janvier 2014
Dernière intervention
13 janvier 2015
- 9 janv. 2014 à 18:05
0
Merci
Effectivement, ça fonctionne bien dans ton programme, plus qu'à modifier pour mettre ça dans le mien

Merci ;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.