4

我有一个函数可以获取 JPEG 格式图片的拍摄日期值。我遇到了 NEF Nikon raw 格式的问题。在 Windows 8 中,如果我将列添加到 Windows 资源管理器详细信息视图,我可以看到 Date Taken 值。

执行以下操作时收到的错误是“此编解码器不支持指定的属性”。

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 的解决方案。

4

2 回答 2

3

我终于解决了这个问题,我不得不在我的电脑上安装尼康 NEF 编解码器。我感到困惑的是,Windows 8 能够开箱即用地显示 NEF 图像并提供来自 EXIF 的元数据,例如拍摄日期。我的直觉告诉我,有一个可以使用的 Windows 或 .NET 库,我可以在不安装编解码器的情况下获得相同的信息。不幸的是,我时间紧迫,没有时间深入研究。

于 2012-12-19T16:14:06.940 回答
0

Java 在这里有一个更通用的开源库:元数据提取器

我刚刚导入了他们的库,它就像文件的魅力一样NEF,而且它支持更多的文件扩展名。

于 2021-10-07T05:46:42.293 回答