用C#读取图片的EXIF信息的方法(一)

引言:

EXIF ,是英文 Exchangeable Image File( 可交换图像文件 ) 的缩写,最初由日本电子工业发展协会 (JEIDA --Japan Electronic Industry Development Association) 制订,目前的版本是修改发表于 1998 年 6 月的 2.1 版。国际标准化组织 (ISO) 正在制订的相机文件设计标准( DCF -- Design role for Camera File system )就是以 EXIF2.1 格 式为基础而设定的。记住, EXIF 是一种图像文件 格 式,只是文件的后缀名还是沿用大家熟悉的 jpg 而已。实际上, EXIF 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在 我 们熟知的 jpg 文件的头部,也就是说 EXIF 信息是镶嵌在 JPEG 图像文件 格 式内的一组拍摄参数,主要包括摄影时的光圈、快门、 ISO 、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统( GPS )等信息。简单的说,它就好像是傻瓜相机的日期打印功能一样,只不过 EXIF 信息所记录的资讯更为详尽和完备。不过,具有 EXIF 信息的 JPEG 图像文件要比普通的 JPEG 文件略大一点。就目前市场而言,新一代的数码相机都具有附加 EXIF 信息功能,大多数的数码相机厂商也都会随数码相机发售时附赠能够读取 EXIF 信息的软件,例如 Nikon 系列的数码相机就附赠 NikonView 软件, Agfa 系列的相机则附赠 Photowize V1.8 版,而富士相机附送的 EXIF viewer 软件更是这方面的领军人物 ( 目前已在很多网站提供免费下载。还有一部分的数码相机会自动将 EXIF 信息转存成文档文件,例如: NIKON CoolPix 990 和 SONY FD 系列。除了硬件厂商随数码相机附带的 EXIF 信息查看软件,很多专业的图像软件厂商在这方面也不甘示弱,相继推出自己公司看图软件的最新版来支持这种近乎完美的 JPEG-EXIF 图像信息附加技术 , 如最近刚推出的 ACDSee 4.0 版本,就对现在流行的各种数码相机有相当好的支持,在 EXIF 图像信息附加方面较之其 3.0 版本也有很大的进步。不管是硬件厂商的配套软件还是专业名门的看图工具,所有这些软件都是为了方便数码摄影者能更方便地保存查看摄影图像的重要信息。 我 们将这些读取 EXIF 信息的软件归纳后分为四类:专业 EXIF 信息查看工具(以富士的 EXIF viewer 为例) 、具有查看 EXIF 信息的强大通用看图工具(以 ACDSee 为例)、支持 EXIF 信息查看的操作系统(微软的 Windows XP )以及可以修改 EXIF 信息的另类工具( EXIF Editer ), 而 我 们这里要讲的是通过 C# 在 WEB 上读取一个图片的 EXIF 信息 。

二、相关类( GetEXIFMetaData ):

因为代码比较长,有五百多行,我只能将关键代码的片段拿出来讲讲,需要源码的请发邮件到 [email protected] 索取,或者直接加到MSN上在MSN提供你的邮箱。

这个类中构造了两个结构 MetadataDetail 和 Metadata , 前者是为了存储EXIF中某元素信息的三种 格 式,起到中间转化的作用,一个是十六进制的索引信息,一个是没用处理过的信息代码,一个是显示信息。后面的那个结构就是存储一张图片所有EXIF信息元素的。 有两个方法 LookupEXIFValue 和 GetEXIFMetaData , 前一个方法是处理特殊元素的对应显示的,后者从图片中读取相关信息然后填充到 MetaData 结构中。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus