Wie Exif Tags einlesen?
- VB.NET
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 61 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.
-
-
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Also irgendwie hat mir das leider überhaupt garnicht geholfen. Also ich hab einen Openfile Dialog und der läd den Pfad der Datei in eine Listbox. Ich will dass er mir in einer Richtextbox alles an Exif Tags ausgibt. Aber bei dem Teil mit dem Exif-Tags komme ich überhaupt nicht weiter. Ich hab schon viel gegoogled, weiß aber nicht was ich mit dem Code anfangen soll, bzw. was der Code tut und wie ich ihn richtig implementiere
-
@Bournout3000 Dann poste mal Deinen Code, wag, was er machen soll und sag, was er macht bzw. nicht macht.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
@Bournout3000 Dann poste mal Deinen Code, wag, was er machen soll und sag, was er macht bzw. nicht macht.
ok also ich hab einen Openfile Dialog und einen Button zum öffnen dafür. Dann hab ich eine Richtextbox und eine Picturebox und eine Listbox. Im Code steht jetzt eig. nicht wirklich was, weil das ja eben nie geklappt hatte bzw. ich nie wusste wie ich das implementieren soll:
VB.NET-Quellcode
- Public Class Form1
- Private Sub Readbtn_Click(sender As Object, e As EventArgs) Handles Readbtn.Click
- Using open As New OpenFileDialog
- open.Title = "Wähle eine Bilddatei aus:"
- open.FileName = ""
- open.Multiselect = True
- 'Ich lasse mehrere Dateien gleichzeitig öffnen,
- 'damit man zwischen verschiedenen Dateien auswählen kann die dann in der Listbox gelisted werden
- open.Filter = JPEG|*.jpeg|PNG|*.png||Alle Dateien|*.*"
- If open.ShowDialog = Windows.Forms.DialogResult.OK Then
- ListBox1.Items.AddRange(open.FileNames)
- Next
- End If
- End Using
- End Sub
- Private Sub ListBox1_SelectedValueChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedValueChanged
- 'Leere den Richtextbox Inhalt wieder
- RichTextBox1.Clear()
- PictureBox1.ImageLocation = ListBox1.SelectedItem
- End Sub
- End Class
-
@Bournout3000 Du musst die Datei als Binary öffnen und denn Inhalt interpretieren.Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
RodFromGermany schrieb:
@Bournout3000 Du musst die Datei als Binary öffnen und denn Inhalt interpretieren. -
Bournout3000 schrieb:
was bedeuted das?Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
Die EXIF-Daten befinden sich in einem Bitmap-Objekt unter der Eigenschaft
PropertyItems
. Das ist ein Array von PropertyItem. Ein PropertyItem stellt ein EXIF-Tag dar. Es enthält u.a. die Tag-ID, den Typ des Wertes und natürlich den Wert in Form von Byte-Array. Um den Wert richtig anzeigen zu können, musst Du den Typ abfragen und jenach Typ das Byte-Array für den Wert mit entsprechenden Methoden konvertieren.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xtts02“ ()
-
xtts02 schrieb:
Die EXIF-Daten befinden sich in einem Bitmap-Objekt unter der EigenschaftPropertyItems
. Das ist ein Array von PropertyItem. Ein PropertyItem stellt ein EXIF-Tag dar... -
Bournout3000 schrieb:
Wie schaue ich das genau nach?
Was denn genau? -
xtts02 schrieb:
Die EXIF-Daten befinden sich in einem Bitmap-Objekt unter der EigenschaftPropertyItems
. Das ist ein Array von PropertyItem. Ein PropertyItem stellt ein EXIF-Tag dar. Es enthält u.a. die Tag-ID, der Typ des Wertes und natürlich der Wert in Form von Byte-Array. Um den Wert richtig anzeigen zu können, musst Du den Typ abfragen und jenach Typ das Byte-Array für den Wert mit entsprechenden Methoden konvertieren.
Das was du von mir willst was ich da angeben soll. Wie ich das angebe -
Bournout3000 schrieb:
was du von mir willst
Ich wollte nix von dir.
Ich versuchte lediglich zu erklären, wie man mit .Net-Framework die EXIF-Daten eines Bildes auslesen kann.Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „xtts02“ ()
-
@Bournout3000
RodFromGermany schrieb:
Dass Du noch nicht gelernt hast, eine Suchfunktion zu benutzen (Forum und Google).
Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
<p>
RodFromGermany schrieb:
@Bournout3000<br />
<p>ok soweit hab ich das jetzt auch dahingeschrieben, aber dieses Bild was da angehängt ist dass ich das so hinbekomme mit dem x{Length=30} und danach diese {System.Drawing.Imaging.PropertyItem}.... das bekomme ich nicht aufgerufen. Es sieht ähnlich aus wie die IDE aber das scheint sie nicht zu sein. -
Bournout3000 schrieb:
das bekomme ich nicht aufgerufenFalls Du diesen Code kopierst, achte auf die C&P-Bremse.
Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch
Ein guter .NET-Snippetkonverter (der ist verfügbar).
Programmierfragen über PN / Konversation werden ignoriert! -
so das hab ich jetzt debugged. Da kommen bei mir 55 {System.Drawing.Imaging.PropertyItem} davon kann ich die ID die Len, den Type und die Value pro property Item sehen. Aber erstmal wie finde ich heraus, was das dann sagt und wie gebe ich das dann genau aus?
-
Ja, das ist eine Fleißarbeit und ein Geduldsspiel, ähnlich wie beim Auslesen von mp3-Tags.
Die Definition der Tags findest Du exiv2.org/tags.html
Jetzt mußt Du "nur" noch die Dich interessierenden ID's auswählen und in einer schönen Select Case aufbereiten.
Und an den Wert der Property kommst Du mit
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „us4711“ ()
-
Hier ein Beispiel mit ein paar Methoden, um die Value-Byte-Array zu parsen. Hoffe, dass es auch ohne Kommentar verständlich ist.
Spoiler anzeigen VB.NET-Quellcode
- Imports System.Runtime.CompilerServices
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Using dlg As New OpenFileDialog
- dlg.Filter = "JPEG Bilder (*.jpg)|*.jpg"
- If dlg.ShowDialog = Windows.Forms.DialogResult.OK Then
- Me.DisplayExifInfo(dlg.FileName)
- End If
- End Using
- End Sub
- Private Sub DisplayExifInfo(filename As String)
- If Not IO.File.Exists(filename) Then Throw New IO.FileNotFoundException
- Dim sb As New System.Text.StringBuilder
- sb.AppendLine("DateTime: " & Now.ToString)
- sb.AppendLine("Filename: " & filename)
- sb.AppendLine("-- Properties: ")
- Using bmp As New Bitmap(filename)
- For Each prop In bmp.PropertyItems
- Dim value As String = String.Empty
- Select Case prop.Type
- Case Is = 2 ' ASCII
- value = prop.Value.GetString
- Case Is = 1, 3 ' Int16
- value = prop.Value.GetInt16.ToString
- Case Is = 4, 7 ' Int32
- value = prop.Value.GetInt32.ToString
- Case Is = 5, 10 ' Zahlenpaar, als Bruch dargestellt
- value = prop.Value.GetRational
- Case Else ' Unbekannt
- value = "Method not yet implemented for this type of data!"
- End Select
- Dim info = String.Format("ID: {0}, Type: {1}, Value: {2}", prop.Id, prop.Type, value)
- sb.AppendLine(info)
- Next
- End Using
- Dim exifInfoFilename = IO.Path.Combine(IO.Path.GetTempPath, IO.Path.GetFileNameWithoutExtension(filename) & ".txt")
- IO.File.WriteAllText(exifInfoFilename, sb.ToString, System.Text.Encoding.UTF8)
- Process.Start(exifInfoFilename)
- End Sub
- End Class
- Public Module ExifExtensions
- <Extension()> Public Function GetString(data() As Byte) As String
- Dim enc = System.Text.Encoding.Default
- Dim nullChar = Convert.ToChar(&H0)
- Dim result = enc.GetString(data)
- If result.EndsWith(nullChar) Then result = result.Substring(0, result.Length - 1)
- Return result
- End Function
- <Extension()> Public Function GetInt16(data() As Byte) As Int16
- Return BitConverter.ToInt16(data, 0)
- End Function
- <Extension()> Public Function GetInt32(data() As Byte) As Int32
- Return BitConverter.ToInt32(data, 0)
- End Function
- <Extension()> Public Function GetRational(data() As Byte) As String
- Dim numerator(3), denominator(3) As Byte
- Array.Copy(data, 0, numerator, 0, 4)
- Array.Copy(data, 4, denominator, 0, 4)
- Return String.Concat(numerator.GetInt32.ToString, "/", denominator.GetInt32.ToString)
- End Function
- End Module
Die Tag-IDs muss man noch so implementieren, dass sie lesbar sind. Die Liste der Tags siehe Posting direkt drüber. -
Also ich hab das auch für ID3 Tags geschrieben aber nun will ich, dass es eben nur funktioniert auch mit diesen Exif Tags. Ich brauche das nämlich für die Schule als Projekt um etwas zu beweisen, aber dafür muss ich das erstmal zum laufen bringen. Ich hab versucht den Code oben einzuarbeiten aber ich bin mir nicht sicher warum es nichts macht bzw. eig. weiß ich nicht ganz genau was ich machen muss, dass es funktioniert. Daher poste ich einfach mal mein Projekt und ihr könnt es dann runterladen und sehen, wieso es nicht geht bzw. was fehlt. Weil ich bin um ehrlich zu sein etwas überfordert weil ich hauptsächlich die Grundkenntnisse so hab und hab leider seit einiger Zeit aus Zeitmangel kaum programmieren können, deswegen bin ich auch so überfordert damit und ich brauche das wirklich dringend also hier ist das Projekt: https://www.dropbox.com/sh/mj81qzahlyrhufq/luRjfya6hN
oder auch direkt als ZIP dropbox.com/s/uy46q6e549pl0a6/ID3-Tag Exif-Tag Reader.zipDieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Bournout3000“ ()
-
Ähnliche Themen
-
ERSC - - Sonstige Problemstellungen
-
5 Benutzer haben hier geschrieben
- Gast (31)
- xtts02 (14)
- RodFromGermany (14)
- Dksksm (2)
- us4711 (1)