none
PropertyItem löschen RRS feed

  • Frage

  • Hallo,
    ich versuche Informationen (properties) aus einem Bild (jpg) auszulesen und zu löschen. Dazu verwende ich folgenden Code:
    Dim Pic as New Bitmap
    ...
    Pic = Image.FromFile(ImagePath)
    ...
    Pic.RemovePropertyItem(ID)
    ...
    Pic.save(Newpath)

    Wenn ich mir nach dem Remove die Pic.PropertyIdList ansehe, fehlt die ID, ebenso fehlt in Pic.PropertyItems das Element. Wenn ich das gespeicherte Bild wieder einlese, ist der Datensatz wieder da! Ich habe bisher keine Erklärung für dieses Phänomen gefunden. Kann mir jemand weiterhelfen?

    MfG Nick

    PS: Ich habe inzwischen auf Streamreader umgestellt. Das hat leider auch nichts gebracht.

    Freitag, 19. Oktober 2012 05:37

Antworten

Alle Antworten

  • Hallo Nick,

    Ich habe auch versucht mit mehreren Beispielen  und es funktioniert nicht aber das kannst Du probieren  vielleicht kann es Dir weiterhelfen. VB.Net - Removing image.PropertyItems data

    Viele Grüße,
    Ionut

    Montag, 22. Oktober 2012 15:46
  • Hallo Ionut,

    vielen Dank für Deinen Hinweis.

    Soweit ich ermitteln konnte, werden Mithilfe der Routine sämtliche textbasierten Metadaten aus dem Bild entfernt. Das ist aber eigentlich nicht das, was ich benötige. In meinem Projekt muss ich gezielt auf einzelne Tags zugreifen können. Ich muss Tags neu anlegen, Inhalte verändern und letztlich auch ganze Tags entfernen können (bis auf das dauerhafte Entfernen klappt ja alles). Mein Versuch, die Daten mittels FileStream zu speichern, hat leider auch nichts gebracht.

    Dim fs As FileStream
    fs = New System.IO.FileStream(ImagePath, IO.FileMode.Open, IO.FileAccess.Read)

    Pic = New Bitmap(fs)
    'der Stream muss offen bleiben, da sonst die Routine ImageToBytes mit einer
    'Fehlermeldung abbricht (Allgemeiner Fehler in GDI+).

    ...
    Dim byteArr() = Tools.ImageToBytes(Pic)

    fs.Close()

    fs.Dispose()
    'auf diese Weise kann ich die vorhandene Datei überschreiben

    fs = New System.IO.FileStream(ImagePath, IO.FileMode.Create, IO.FileAccess.Write)

    fs.Write(byteArr, 0, byteArr.GetUpperBound(0))

    fs.Flush()
    ...

    Wenn es sonst keinen Workaround gibt, werde ich das Projekt wohl beerdigen müssen.

    Viele Grüße
    Nick

    Dienstag, 23. Oktober 2012 12:11
  • Hallo Nick,

    Ich habe etwas gefunden die vielleicht Dir helfen kann. Hier findest du ein KB Artikel über  das Problem und dort gibt es ein Workaround. Hier findest Du ein Beispiel mit .EXIF die auf dem Artikel basiert.

    Viele Grüße,

    Ionut


    • Bearbeitet Ionut Duma Mittwoch, 24. Oktober 2012 09:08
    Mittwoch, 24. Oktober 2012 09:05
  • Hallo Ionut,

    Dein Tipp könnte die Lösung sein. Gut finde ich auch die Erläuterungen, die mir geholfen haben, den gesamten Sachverhalt besser zu verstehen. Allein diese Erläuterungen waren schon sehr hilfreich.

    Die Details muss ich jetzt noch aufarbeiten, da mir C# und Teile von GDI+ nicht so geläufig sind. Ich denke aber, den entscheidenden Hinweis bekommen zu haben.

    Besten Dank und viele Grüße
    Nick

    Donnerstag, 25. Oktober 2012 07:50
  • Hallo Nick,

    der Workaround hat ein kleines Problem: Du erzeugst damit ein neues Bild und bei JPEG bedeutet das Qualitätsverlust.
    Wiederholt man das mehrmalig, ist irgendwann nur noch Pixelsalat vorhanden ;)
    GDI+ ist nicht die beste Wahl - zumal als das Ende der 90er erfunden wurde, war Tagging bei Bilder noch selten.

    Besser dafür eingerichtet ist WPF, schau Dir mal an:
    EXIF Compare Utility using WPF

    http://blogs.msdn.com/b/rwlodarc/archive/2007/07/18/using-wpf-s-inplacebitmapmetadatawriter.aspx

    http://www.i-programmer.info/programming/wpf-workings/588-bitmap-codingencoding-and-working-with-metadata.html?start=2

    http://blog.andreweichacker.com/2009/02/reading-and-writing-tags-for-photos-in-wpf/

    Write EXIF Metadata to Jpeg File

    Die diversen Links sollten einen Einblick geben, denn leider ist WPF an der Stelle nicht gerade einfach zu handhaben.

    Gruß Elmar

    • Als Antwort markiert nickniekamp Freitag, 26. Oktober 2012 09:03
    • Tag als Antwort aufgehoben nickniekamp Freitag, 26. Oktober 2012 09:03
    • Als Antwort vorgeschlagen Thorsten Dörfler Montag, 29. Oktober 2012 22:02
    • Als Antwort markiert Ionut Duma Donnerstag, 1. November 2012 15:05
    Donnerstag, 25. Oktober 2012 08:45
  • Hallo Elmar,

    vielen Dank für Deinen Beitrag, den ich mit großem Interesse gelesen habe. 

    Gruß,
    Nick

    Freitag, 26. Oktober 2012 09:04
  • Hallo Nick,

    Hast Du eigentlich Dein Problem gelöst ? Können wir Dir weiterhelfen?

    Gruß,

    Ionut

    Mittwoch, 31. Oktober 2012 13:33
  • Hallo Ionut,

    im Prinzip ja. Ich habe den Vorschlag von Elmar aufgegriffen und bin dabei, mein Projekt auf WPF umzustellen.
    Nochmals besten Dank an alle.

    Gruß, Nick

    PS: Habe nicht nur mein Projekt umgestellt, sondern bin auch auf VS 2012 umgestiegen, da mich weder 2008 noch 2010 überzeugen konnten. Von der aktuellen Version bin ich jedoch sehr angetan, da sie in Sachen Performance und Stabilität hervorragendes leistet (nur die Pictogramme erinnern mich entfernt an Office 98 ;).

    Donnerstag, 1. November 2012 15:03