我有一个函数,可以获取JPEG格式图片的拍摄日期值。我在NEF尼康原始格式上遇到了问题。在 Windows 8 中,如果我将该列添加到 Windows 资源管理器详细信息视图,则可以看到"拍摄日期"值。
执行以下内容时收到的错误是"此编解码器不支持指定的属性"。
public string GetDate(FileInfo f)
{
string date;
using (FileStream fs = new FileStream(f.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
BitmapSource img = BitmapFrame.Create(fs);
BitmapMetadata md = (BitmapMetadata)img.Metadata;
date = md.DateTaken;
}
return date;
}
我尝试了本文中类似的 SO 答案中引用的建议,使用 BitmapMetadata 的 GetQuery 方法,但返回了相同的错误,这是我使用的代码:
public string GetDate(FileInfo f)
{
string date;
using (FileStream fs = new FileStream(f.FullName, FileMode.Open, FileAccess.Read, FileShare.Read))
{
BitmapSource img = BitmapFrame.Create(fs);
BitmapMetadata md = (BitmapMetadata)img.Metadata;
object t = Mdata.GetQuery("System.Photo.DateTaken");
}
return date;
}
我正在将其部署到Windows 8 PC,所以我不介意仅Windows 8或.NET 4.5的解决方案。
我终于弄清楚了这个问题,我不得不在我的电脑上安装尼康NEF编解码器。我感到困惑的是,Windows 8能够显示NEF图像并提供来自EXIF的元数据,例如开箱即用的日期。我的直觉告诉我,我可以使用Windows或.NET库,我可以在不安装编解码器的情况下获得相同的信息。不幸的是,我时间紧迫,没有时间深入研究。
Java在这里有一个更通用的开源库:元数据提取器
我刚刚导入了他们的库,它就像一个带有NEF
文件的魅力,而且它支持更多的文件扩展名。