65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.40/5 (4投票s)

2007 年 7 月 2 日

CPOL

2分钟阅读

viewsIcon

68275

downloadIcon

1243

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

Screenshot - Article_Image.jpg

引言

当我们谈论数码摄影时,首先想到的就是 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 对象,我们就可以使用 BitmapFrameMetaData 属性获取图像的元数据信息。 我们可以将 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 类的代码,以便在没有信息可用时提供用户友好的消息。

历史

目前无可用内容。

© . All rights reserved.