Exif Daten aus JPG Datei auslesen bzw. schreiben

  • VB.NET

SSL ist deaktiviert! SSL für diese Sitzung aktivieren

    Exif Daten aus JPG Datei auslesen bzw. schreiben

    Hallo Leute,

    ich habe bei einem Programm ein kleines Problem. Ich habe eine Anwendung erstellt die Fotos verschiebt anhand von einer Startnummer die eingegeben wird. Es wird das Verzeichniss im Programm ausgewählt und die Bilder in dem Verzeichniss werden in einer Listbox angezeigt. Bei dem Importieren möchte ich die EXIF Daten von den Fotos überprüfen, wenn ich Kommentarfeld ein bestimmt Text steht sollte das Foto nicht mehr in die Listbox aufgenommen werden.
    Ich bringe es aber nicht zusammen das EXIF Feld Kommentar zu beschreiben. Auslesen hab ich bereits geschaft über:

    Dim img As BitmapSource = BitmapFrame.Create(New Uri("C:\TEST123.jpg", UriKind.Relative))
    Dim meta As BitmapMetadata = img.Metadata

    Label1.Text = meta.Comment

    Es gibt aus die Möglichkeit laut MSDN "BitmapMetadata.SetQuery" aber irgendwie bekomm ich das nicht hin.
    Ich arbeite derzeit im Visual Studio 2010.
    Ich hoffe es kann mir jemand weiterhelfen, Vielen Dank.
    Nein, schnellste Methode ist es wahrscheinlich nicht.
    Während der Testphase hatte ich zweck Testens ein paar Verzeichnisse mit etwa 1000 bis 2000 Dateien in Collection geladen. Das hat zwischen einer und fünf Minuten zum Laden gedauert. Mit zunehmender Anzahl der Dateien steigt die Dauer überproportial.
    Später während des Sortier- bzw. Verschiebe-Vorgangs wird der dynamisch erzeugte Instanz sofort nach dem Verschieben der Datei disposed, sodass das Programm gar nicht viel Speicher verbraucht. Für ca. 40.000 Dateien (viele Datei Duplikate) hat der ganze Sortier-Vorgang ein paar Stunden gedauert. Ich kann leider nicht genau sagen, ob es 4 oder 6 Stunden waren, denn ich hatte das Programm über Nacht laufen lassen.
    Hallo Leute,

    ich habe nochmals im Internet bezüglich dem Problem gesucht. Laut Microsoft ist es mit "InPlaceBitmapMetadataWriter" möglich. Ich habe allerdings keine Ahnung wie das funktionieren soll, irgendwie bekomm ich das nicht gebacken. Wenn ich den Befehl "SetQuery" verwende, erhalte ich die Fehlermeldung "Zum Ändern des angegebenen Werts vom Typ "System.Windows.Media.Imaging.BitmapMetadata" muss "IsFrozen" auf "false" festgelegt sein." Ich weiß aber nicht wie den Wert auf False setzen kann. Das Auslesen funktioniert wunderbar.
    Für Hilfe wäre ich echt Dankbar.
    Hallo Leute,

    jetzt bin ich schon soweit das ich die Werte schreiben kann sie werden allerdings im File noch nicht gespeichert. Hat da vl noch jemand eine Idee?

    VB.NET-Quellcode

    1. Dim jpgStream As New System.IO.FileStream("C:\TEST123.jpg", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)
    2. Dim jpgDecoder As New JpegBitmapDecoder(jpgStream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default)
    3. Dim jpgFrame As BitmapFrame = jpgDecoder.Frames(0)
    4. Dim jpgInplace As InPlaceBitmapMetadataWriter = jpgFrame.CreateInPlaceBitmapMetadataWriter()
    5. Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click
    6. MsgBox(jpgInplace.Keywords.Item(0))
    7. jpgInplace.SetQuery("System.Keywords", "TEST7")
    8. MsgBox(jpgInplace.Keywords.Item(0))
    9. jpgInplace.TrySave()
    10. jpgStream.Close()
    11. End Sub

    Bei der ersten MsgBox wird der Wert zurückgeben der derzeit im File steht also "TEST"
    Nachdem der Wert Set Query also Test7 geschrieben wird, gibt die MsgBox "TEST7" aus.
    Nur wie kann ich die Änderung jetzt in dem File auch speichert hat da jemand eine Idee.
    Danke