[PATCH] Improve date retreival from exif data



While importing my photo library, I noticed that some photos were
getting the current date instead of the date that they were taken.

It turns out that a bunch of my photos only have DateTime set, and not
DateTimeOriginal.

The following patch tries to get the date from exif data like so:
DateTimeOriginal
DateTime
DateTimeDigitized

It may not be perfect. This is the first C#/Mono code i have ever
written.

diff -u -r1.9 Exif.cs
--- src/Exif.cs	25 Mar 2005 04:45:59 -0000	1.9
+++ src/Exif.cs	26 Apr 2005 07:18:06 -0000
@@ -480,13 +480,6 @@
 			}
 
 			exif_entry_initialize (handle, tag);
-
-			//FIXME the month string in time fields in libexif ix currently broken so we do our own. 
-			if (tag == ExifTag.DateTime
-			    || tag == ExifTag.DateTimeOriginal
-			    || tag == ExifTag.DateTimeDigitized)
-				this.SetData (System.DateTime.Now);
-
 		}
 
 
diff -u -r1.59 PhotoStore.cs
--- src/PhotoStore.cs	30 Mar 2005 04:25:27 -0000	1.59
+++ src/PhotoStore.cs	26 Apr 2005 07:18:09 -0000
@@ -517,8 +517,12 @@
 		try {
 			using (Exif.ExifData ed = new Exif.ExifData (path)) {
 				Exif.ExifContent content = ed.GetContents (Exif.ExifIfd.Exif);
-				Exif.ExifEntry entry = content.GetEntry (Exif.ExifTag.DateTimeOriginal);
-				time = Exif.ExifUtil.DateTimeFromString (entry.Value); 
+				Exif.ExifEntry entry = content.Lookup (Exif.ExifTag.DateTimeOriginal);
+				if (entry.Value==null)
+					entry = content.GetEntry (Exif.ExifTag.DateTime);
+				if (entry.Value==null)
+					entry = content.GetEntry (Exif.ExifTag.DateTimeDigitized);
+				time = Exif.ExifUtil.DateTimeFromString (entry.Value);
 				time = time.ToUniversalTime ();
 			}			
 		} catch (System.Exception e) {

-- 
Stewart Smith (stewart flamingspork com)
http://www.flamingspork.com/

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]