Add EXIF date to photo

If you have a photo that you need to add a timestamp to the EXIF information, you can use the following .NET code. Apparently there are a ridiculous number of formats and standards which are incompatible with each other and conflicting, but from what I’ve found, this should cover regular use cases.

I’m sure there’s a better solution, but this requires that you have some unrelated image file that has the appropriate tags in it, in case your photo is missing the properties entirely. Not exactly a great solution, but it does seem to work.

static void Go(string oldFile, string newFile) {
    DateTime theDate = new DateTime(2009, 1, 15);
 
    Func<int, PropertyItem> getPropItem = id => {
        using (var image = Image.FromFile(@"c:\temp\IMG_6139.jpg")) { // Some unrelated image file that already has EXIF data
            return image.GetPropertyItem(id);
        }
    };
 
    using (var image = Image.FromFile(oldFile)) {
        PropertyItem propItem;
        int ID = 0x9004;
        try {
            propItem = image.GetPropertyItem(ID);
        } catch {
            propItem = getPropItem();
        }
        propItem.Value = Encoding.UTF8.GetBytes(theDate.ToString("yyyy\\:MM\\:dd HH\\:mm\\:ss") + "\0");
        image.SetPropertyItem(propItem);
 
        ID = 0x0132;
        try {
            propItem = image.GetPropertyItem(ID);
        } catch {
            propItem = getPropItem();
        }
        propItem.Value = Encoding.UTF8.GetBytes(theDate.ToString("yyyy\\:MM\\:dd HH\\:mm\\:ss") + "\0");
        image.SetPropertyItem(propItem);
 
        image.Save(newFile, ImageFormat.Jpeg);
    }
}

Comments

Popular posts from this blog

C# Record Serialization

Add timestamp to photo using ImageMagick

Read/write large blob to SQL Server from C#