IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Récupérer les Exif d'un fichier JPG (photo)


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    developpeur amateur
    Inscrit en
    Décembre 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur amateur

    Informations forums :
    Inscription : Décembre 2022
    Messages : 3
    Par défaut Récupérer les Exif d'un fichier JPG (photo)
    Bonjour,
    Je suis débutant en VB et je souhaiterai pouvoir récupérer les valeurs Exif d'un fichier JPG (photo), et de créer un écran de visualisation de ces données. Pour la partie écran, je n'ai pas de problème. Pour les Exifs j'ai déjà récupérer des choses mais les résultats ne sont pas correctes, du style le temps de pose ne peut dépasser 1 seconde. Quelqu'un aurait-il travailler sur ce sujet.
    Merci

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 015

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    developpeur amateur
    Inscrit en
    Décembre 2022
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : developpeur amateur

    Informations forums :
    Inscription : Décembre 2022
    Messages : 3
    Par défaut
    Merci de votre aide. Je suis débutant de chez débutant, je ne connais que le langage VB (débutant) et l'anglais est un peu difficile.
    Je suis conscient que tout ça n'aide pas. Tous les infos que je trouve sont en C#. C'est pas grave je vais persévérer
    Merci

  4. #4
    Membre émérite
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Octobre 2006
    Messages
    741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Jura (Franche Comté)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Octobre 2006
    Messages : 741
    Par défaut
    Il existe des convertisseurs en ligne de code VB.net vers C# et inversement.
    Par exemple :
    https://converter.telerik.com/
    https://www.codeconvert.ai/csharp-to-vb.net-converter
    ou
    https://icsharpcode.github.io/CodeConverter/

  5. #5
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 015
    Par défaut
    Citation Envoyé par Pyrof Voir le message
    Merci de votre aide. Je suis débutant de chez débutant, je ne connais que le langage VB (débutant) et l'anglais est un peu difficile.
    Je suis conscient que tout ça n'aide pas. Tous les infos que je trouve sont en C#. C'est pas grave je vais persévérer
    Merci
    VB.Net et C#, c'est uniquement une question de syntaxe.
    Cela reste du .Net.

    Le NuGet est donc également disponible sur un projet écrit en VB.Net.

    Pour la syntaxe, il n'y a franchement rien d'insurmontable.
    Et il existe des convertisseurs comme ceux proposés par m4k-Hurrican.

  6. #6
    Membre éprouvé Avatar de excalybur
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Novembre 2014
    Messages
    319
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 319
    Par défaut
    Bonjour

    Il y a quelque temps j'ai eu le mêm problème pour identifier les exifs de jpeg, bmp et raw (divers formats!) . Je te met le code complet d'une function que tu peu adapter à tes besoin :

    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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    Imports System.Drawing
    Imports System.Drawing.Imaging
    Imports System.Text
    Imports MetadataExtractor
    Imports MetadataExtractor.Formats.Exif
    Imports System.Diagnostics
     
    ''' <summary>
    ''' Lit les métadonnées EXIF d'un fichier image (JPEG, RAW, BMP).
    ''' Retourne un dictionnaire (nom de tag -> valeur).
    ''' </summary>
    Public Function ReadExif(path As String) As Dictionary(Of String, String)
        Dim result As New Dictionary(Of String, String)(StringComparer.OrdinalIgnoreCase)
     
        ' 1) Essayer d'abord MetadataExtractor (meilleur support pour RAW & divers formats)
        Try
            Dim directories = ImageMetadataReader.ReadMetadata(path)
            For Each dir In directories
                For Each tag In dir.Tags
                    Dim key = $"{dir.Name} - {tag.Name}"
                    If Not result.ContainsKey(key) Then
                        result(key) = If(tag.Description, String.Empty)
                    End If
                Next
                ' Enregistrer les erreurs non bloquantes rencontrées lors de l'analyse
                For Each err In dir.Errors
                    Dim k = $"{dir.Name} - Error"
                    result(k) = err
                Next
            Next
            If result.Count > 0 Then
                Return result
            End If
        Catch ex As Exception
            ' Ignorer les erreurs et tenter le fallback
            Debug.WriteLine($"MetadataExtractor échoué pour '{path}': {ex.Message}")
        End Try
     
        ' 2) Fallback pour JPEG/BMP via System.Drawing (lit les PropertyItems disponibles)
        Try
            Using img = Image.FromFile(path)
                For Each p As PropertyItem In img.PropertyItems
                    Dim name = ExifTagName(p.Id)
                    Dim value = PropertyItemToString(p)
                    If Not result.ContainsKey(name) Then
                        result(name) = value
                    End If
                Next
            End Using
        Catch ex As Exception
            ' Si tout échoue, retourner l'erreur en entrée du dictionnaire
            result("Error") = ex.Message
        End Try
     
        Return result
    End Function
     
    ' Retourne un nom lisible pour quelques tags EXIF courants (ajouter si nécessaire)
    Private Function ExifTagName(id As Integer) As String
        Select Case id
            Case &H010F : Return "Make"
            Case &H0110 : Return "Model"
            Case &H0132 : Return "DateTime"
            Case &H9003 : Return "DateTimeOriginal"
            Case &H829A : Return "ExposureTime"
            Case &H829D : Return "FNumber"
            Case &H8827 : Return "ISOSpeedRatings"
            Case &H9209 : Return "Flash"
            Case &H920A : Return "FocalLength"
            Case &HA002 : Return "PixelXDimension"
            Case &HA003 : Return "PixelYDimension"
            Case Else
                Return $"Tag_0x{id:X4}"
        End Select
    End Function
     
    ' Convertit un PropertyItem en chaîne lisible
    Private Function PropertyItemToString(p As PropertyItem) As String
        Try
            Select Case p.Type
                Case 1 ' byte
                    If p.Value IsNot Nothing AndAlso p.Value.Length > 0 Then
                        Return p.Value(0).ToString()
                    End If
                Case 2 ' ASCII
                    Dim s = Encoding.ASCII.GetString(p.Value)
                    Return s.Trim(ChrW(0))
                Case 3 ' short (UInt16)
                    If p.Value IsNot Nothing AndAlso p.Value.Length >= 2 Then
                        Return BitConverter.ToUInt16(p.Value, 0).ToString()
                    End If
                Case 4 ' long (UInt32)
                    If p.Value IsNot Nothing AndAlso p.Value.Length >= 4 Then
                        Return BitConverter.ToUInt32(p.Value, 0).ToString()
                    End If
                Case 5 ' rational (deux UInt32: num/den)
                    If p.Value IsNot Nothing AndAlso p.Value.Length >= 8 Then
                        Dim num = BitConverter.ToUInt32(p.Value, 0)
                        Dim den = BitConverter.ToUInt32(p.Value, 4)
                        If den <> 0 Then
                            Return (num / den).ToString(System.Globalization.CultureInfo.InvariantCulture)
                        End If
                        Return $"{num}/{den}"
                    End If
                Case 10 ' signed rational
                    If p.Value IsNot Nothing AndAlso p.Value.Length >= 8 Then
                        Dim num = BitConverter.ToInt32(p.Value, 0)
                        Dim den = BitConverter.ToInt32(p.Value, 4)
                        If den <> 0 Then
                            Return (num / den).ToString(System.Globalization.CultureInfo.InvariantCulture)
                        End If
                        Return $"{num}/{den}"
                    End If
                Case Else
                    If p.Value IsNot Nothing Then
                        Return BitConverter.ToString(p.Value)
                    End If
            End Select
        Catch ex As Exception
            Debug.WriteLine($"Erreur conversion PropertyItem: {ex.Message}")
        End Try
        Return String.Empty
    End Function
    a+

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 377
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 377
    Par défaut
    Hello,

    Merci de votre aide. Je suis débutant de chez débutant, je ne connais que le langage VB (débutant) et l'anglais est un peu difficile.
    Je pense que vous devriez être plus précis sur le type de réponse que vous attendez des membres qui vous répondent.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Lire et ecrire des données Exif dans un fichier JPG
    Par rlapt dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/07/2020, 19h36
  2. Renommer un fichier JPG selon donnees EXIF
    Par jerem7w dans le forum VBScript
    Réponses: 5
    Dernier message: 25/01/2014, 15h47
  3. [XL-2007] Modifier les propriété avancé d'un fichier "JPG"
    Par Pyton dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 25/03/2012, 10h02
  4. Réponses: 0
    Dernier message: 03/05/2010, 18h43
  5. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo