简化访问图像元数据的库






4.84/5 (29投票s)
2004年8月4日
4分钟阅读

288662

10131
一个简化图像元数据访问的库。
引言
几种图像文件格式允许您将元数据与图像一起存储。元数据是关于图像的信息,例如标题、宽度、相机型号和艺术家。Microsoft Windows GDI+ 提供了一种统一的方式来存储和检索标记图像文件格式 (TIFF)、JPEG、便携式网络图形 (PNG) 和可交换图像文件 (EXIF) 格式中的元数据。在 GDI+ 中,一段元数据称为属性项,单个属性项由称为属性标签的数字常量标识。
在 .NET Framework 中,您可以通过调用 Image
类的 SetPropertyItem
和 GetPropertyItem
方法来存储和检索元数据,而无需担心特定文件格式如何存储该元数据的详细信息。
另一个问题是如何使用这些数据。您只会收到一个字节数组,如何解释它由您自己决定。此库通过将它们转换为普通的 .NET 数据类型并将它们组织成类属性和/或哈希表的形式,从而简化了对这些图像元数据的访问。
编写此类信息的主要来源是 MSDN。
MSDN 主页 > MSDN 库 > 图形和多媒体 > GDI+ > GDI+ 参考 > 常量
我还要感谢 **Jeffrey S. Gangel**,他/她写在 CodeProject 上的文章“照片属性”给了我写这个类的想法。他的程序基本做了同样的事情,唯一的区别是我想要以我认为更舒适和更传统的形式来获取图像信息。
并非所有图像属性标签都实现为类属性。这些只能从 PropertyItems
哈希表中访问。如果有人需要这个库,甚至需要特定的属性,我很乐意帮助他。但我认为这是不必要的,因为所有源代码都可用且可修改。
用法
// Accessing image proprties
public void ShowEquipModel()
{
Info inf=new Info("c:\\tmp\\Example.jpeg");
MessageBox.Show(inf.EquipModel);
}
// Accessing image proprties as a hastable
public void ShowAllProperties()
{
Info inf=new Info("c:\\tmp\\Example.jpeg");
listView.Items.Clear();
foreach (string propertyname in inf.PropertyItems.Keys) {
ListViewItem item1 = new ListViewItem(propertyname,0);
item1.SubItems.Add((inf.PropertyItems[propertyname]).ToString());
listView.Items.Add(item1);
}
}
下面列出了 Info
类的属性
亮度
亮度值。单位是 APEX 值。通常,它在 -99.99 到 99.99 的范围内。
Copyright
版权信息。
日期时间
图像创建的日期和时间。
DTDigitized
图像被存储为数字数据时的日期和时间。例如,如果图像由 DSC 拍摄,同时记录了文件,那么
DateTimeOriginal
和DateTimeDigitized
将具有相同的内容。DTOrig
原始图像数据生成时的日期和时间。对于 DSC,是拍摄照片时的日期和时间。
EquipMake
用于记录图像的设备的制造商。
EquipModel
用于记录图像的设备的型号名称或型号。
ExposureProg
相机在拍摄照片时用于设置曝光的程序类别。
FNumber
f 值。
FocalLength
镜头的实际焦距,单位为毫米。不转换为 35 毫米胶片相机的焦距。
Image
设置或返回当前的
Image
对象。ISOSpeed
根据 ISO 12232 指定的相机或输入设备的 ISO 速度和 ISO 纬度。
MeteringMode
测光模式。
- Orientation
从行和列的角度查看的图像方向。
PixXDim
类型为
PropertyTagTypeShort
或PropertyTagTypeLong
。特定于压缩数据的信息。记录压缩文件时,必须在此标签中记录有效图像的有效宽度,无论是否有填充数据或重启标记。此标签不应存在于未压缩的文件中。PixYDim
类型为
PropertyTagTypeShort
或PropertyTagTypeLong
。特定于压缩数据的信息。记录压缩文件时,必须在此标签中记录有效图像的有效高度,无论是否有填充数据或重启标记。此标签不应存在于未压缩的文件中。由于垂直方向不需要数据填充,因此在此有效图像高度标签中记录的行数将与 SOF 中记录的行数相同。PropertyItems
返回给定
Image
的所有可用属性的HashTable
。此HashTable
的键是属性标签的显示名称,值是转换后的(类型的)数据。ResolutionUnit
水平分辨率和垂直分辨率的度量单位。2 - 英寸 3 - 厘米。
XResolution
图像宽度 (x) 方向上每单位的像素数。单位由
PropertyTagResolutionUnit
指定。YResolution
图像高度 (y) 方向上每单位的像素数。单位由
PropertyTagResolutionUnit
指定。