在 .NET 3.0 中检索图像的 EXIF 信息






3.40/5 (4投票s)
如何在 .NET 3.0 中检索图像的 EXIF 信息。
引言
当我们谈论数码摄影时,首先想到的就是 EXIF 信息。 什么是 EXIF 信息? EXIF 是“可交换图像文件”的缩写。 这是一个使用 JPEG 压缩存储数码摄影图像文件中可交换信息的标准。 大多数新数码相机都使用 EXIF 注释,并存储有关图像的信息,例如快门速度、曝光、补偿、F 值、测光系统、ISO 值、日期时间等。 这段代码解释了如何使用 .NET 3.0 从图像中检索 EXIF 信息。
使用代码
要使用该代码,您应该在您的机器上安装以下项目
- .NET Framework 3.0
- Visual Studio 2005 的 WPF 修补程序发布
使用该代码非常简单,可以从上方下载。 在代码中,ExifMetaInfo
类的构造函数接受图像的 URI 作为参数,并创建一个 BitmapFrame
类型的对象(BitmapFrame
是 .NET 3.0 的“System.Windows.Media.Imaging
”下可用的新类库)。 一旦创建了 BitmapFrame
对象,我们就可以使用 BitmapFrame
的 MetaData
属性获取图像的元数据信息。 我们可以将 MetaData
属性转换为 BitmapMetadata
类,这又是 .NET 3.0 中“System.Windows.Media.Imaging
”下的一个新类。 现在,只需将正确的参数传递给 "BitmapMetadata
" 对象以获取 EXIF 信息。 以下是我们可以传递的参数列表,以获取适当的 EXIF 信息
宽度 |
/app1/ifd/exif/subifd:{uint=40962} |
高度 |
/app1/ifd/exif/subifd:{uint=40963} |
设备制造商 |
/app1/ifd/exif:{uint=271} |
相机型号 |
/app1/ifd/exif:{uint=272} |
创建软件 |
/app1/ifd/exif:{uint=305} |
颜色表示 |
/app1/ifd/exif/subifd:{uint=40961}") |
曝光时间 |
/app1/ifd/exif/subifd:{uint=33434} |
镜头光圈 |
/app1/ifd/exif/subifd:{uint=33437} |
.....还有更多。
以下部分显示了 ExifMetaInfo
类的构造函数的快照,它接受 URI 作为参数并创建一个 BitmapFrame
类型的对象
public ExifMetaInfo(Uri imageUri)
{
BitmapFrame bFrame = BitmapFrame.Create(imageUri,
BitmapCreateOptions.DelayCreation,
BitmapCacheOption.None);
_metaInfo = (BitmapMetadata)bFrame.Metadata;
}
一旦我们完成了对象的创建,接下来要做的是获取这些值。 在给定的类中,所有 EXIF 信息都是通过属性检索的。 以下代码显示了图像 Width
属性的检索
public uint? Width
{
get
{
object obj = GetMetaInfo("/app1/ifd/exif/subifd:{uint=40962}");
if (obj == null)
{
return null;
}
else
{
if (obj.GetType() == typeof(UInt32))
return (uint)obj;
else
return Convert.ToUInt32(obj);
}
}
}
private object GetMetaInfo(string infoQuery)
{
if (_metaInfo.ContainsQuery(infoQuery))
return _metaInfo.GetQuery(infoQuery);
else
return null;
}
关注点
请注意,并非所有 JPG 图像都可能具有 EXIF 信息。 您可以修改 ExifMetaInfo
类的代码,以便在没有信息可用时提供用户友好的消息。
历史
目前无可用内容。