DateTime getPhotoTime(string fn)
{
DateTime dtaken = DateTime.MinValue;
if (filedatecache.ContainsKey(fn))
{
return (DateTime)filedatecache[fn];
}
try
{
Metadata lcMetadata = null;
try
{
FileInfo lcImgFile = new FileInfo(fn);
// Loading all meta data
if (fn.ToLower().EndsWith(".jpg"))
{
lcMetadata = JpegMetadataReader.ReadMetadata(lcImgFile);
}
else if (fn.ToLower().EndsWith(".tif"))
{
lcMetadata = TiffMetadataReader.ReadMetadata(lcImgFile);
}
}
catch (JpegProcessingException e)
{
log.InfoFormat(e.Message);
return dtaken;
}
catch (TiffProcessingException e)
{
log.InfoFormat(e.Message);
return dtaken;
}
foreach (AbstractDirectory lcDirectory in lcMetadata)
{
if (lcDirectory.ContainsTag(0x9003))
{
dtaken = lcDirectory.GetDate(0x9003);
log.InfoFormat("does " + lcDirectory.GetTagName(0x9003) + " " + dtaken);
filedatecache[fn] = dtaken;
break;
}
if (lcDirectory.ContainsTag(0x9004))
{
dtaken = lcDirectory.GetDate(0x9004);
log.InfoFormat("does " + lcDirectory.GetTagName(0x9004) + " " + dtaken);
filedatecache[fn] = dtaken;
break;
}
}
////// old method, works, just slow
/*
Image myImage = Image.FromFile(fn);
PropertyItem propItem = myImage.GetPropertyItem(36867); // 36867 // 306
//Convert date taken metadata to a DateTime object
string sdate = Encoding.UTF8.GetString(propItem.Value).Trim();
string secondhalf = sdate.Substring(sdate.IndexOf(" "), (sdate.Length - sdate.IndexOf(" ")));
string firsthalf = sdate.Substring(0, 10);
firsthalf = firsthalf.Replace(":", "-");
sdate = firsthalf + secondhalf;
dtaken = DateTime.Parse(sdate);
myImage.Dispose();
*/
}
catch { }
return dtaken;
}