Laden...

Aufnahmedatum eines *.jpgs ändern, EXIF PropertyItem

Erstellt von genuin vor 8 Jahren Letzter Beitrag vor 8 Jahren 3.489 Views
G
genuin Themenstarter:in
41 Beiträge seit 2014
vor 8 Jahren
Aufnahmedatum eines *.jpgs ändern, EXIF PropertyItem

Hi!

Ich möchte das Aufnahmedatum eines jpgs ändern.
Gespeichert sind diese Daten, wie unzählig andere in der EXIF eines Bildes. Die Daten dort heißen PropertyItems (https://msdn.microsoft.com/en-us/library/system.drawing.imaging.propertyitem.id(v=vs.110).aspx). Wie im auskommentierten Bereich unten im Code ersichtlich, lässt sich so beispielsweise das Kameramodell ändern. Möchte ich aber nun das Aufnahmedatum ändern, bleibt das Datum, das schon vorher als Aufnahmedatum existierte, unverändert. Hat hier jemand eine Idee dazu, warum das so ist?


public void ModifiyPictures()
        {
            Encoding _Encoding = Encoding.UTF8;
            Image myImage = new Bitmap(@"C:\tempEXIF\exif_old.jpg");

            PropertyItem[] propItems = myImage.PropertyItems;

            //Kameramodell ändern funktioniert
            //PropertyItem PropItemCamModel = myImage.GetPropertyItem(272);
            //PropItemCamModel.Value = _Encoding.GetBytes("SonyMod" + '\0');

            PropertyItem PropItemOldShotDate = myImage.GetPropertyItem(36867);
            PropItemOldShotDate.Value = _Encoding.GetBytes("20.05.15 15:00" + '\0');
            
            myImage.SetPropertyItem(PropItemOldShotDate);
            myImage.Save(@"C:\tempEXIF\exif_new.jpg");
        }      

Überleg ich mir noch

W
955 Beiträge seit 2010
vor 8 Jahren

Und warum liest du dir die Doku nicht durch?

The format is YYYY:MM:DD HH:MM:SS with time shown in 24-hour format and the date and time separated by one blank character (0x2000).

G
genuin Themenstarter:in
41 Beiträge seit 2014
vor 8 Jahren

Damit funktioniert es. Doku lesen wäre sicherlich hilfreich gewesen, war aber auf dem Holzweg, dass ich dachte, dass sich zumindest etwas hätte ändern müssen, auch bei falscher Formateingabe.

Nochmal den korrekten Code an dieser Stelle und Danke an witte für den Gedankenanstoß 😃


 public void ModifiyPictures()
        {
            Encoding enc = Encoding.UTF8;
            Image myImage = new Bitmap(@"C:\tempEXIF\exif.jpg");     

            PropertyItem propItemOldShotDate = myImage.GetPropertyItem(36867);
            propItemOldShotDate.Value = enc.GetBytes("1981:05:15 15:00:00" + '\0');
            
            myImage.SetPropertyItem(propItemOldShotDate);
            myImage.Save(@"C:\tempEXIF\exif_new.jpg");
        }         

Überleg ich mir noch