LV035-JPEG中的Exif简介
其实使用工具来分析JPEG图片就可以了,但是之前做项目的时候遇到了一种Exif结构的JPEG图片,内部包含的信息比JFIF的要多,要复杂,还包含了一张缩略图,缩略图的分辨率信息也是从FF C0开始的,由于获取图片分辨率的时候是直接查找FF C0,所以就获取到了错误分辨率,这里写个笔记,简单解析一下Exif格式图片中的一些额外的信息。
一、概述
上一节的时候已经简单说明过:JPEG标准主要是围绕编解码的部分(如DCT变换、量化、哈夫曼树等等),虽然在JPEG标准中也定义了“JPEG Interchange Format (JIF)”的文件存储格式,但是因为Encoder和Decoder完整实现JIF很困难,且JIF标准也存在一些缺陷,因此JIF并没有被推广开来。后来出现的“JPEG File Interchange Format (JFIF)” 和 “**Exchange image file Format(**Exif)” 等新的存储格式成为了主流。Exif 和 JFIF 都是遵循 JIF标准的,两者只是在JIF的基础上增加了一些各自的Marker。
- JPEG是压缩标准,JPEG/JFIF和JPEG/Exif是文件格式标准,不是一个概念,需要注意区分。
- JPEG/Exif文件格式标准是Camera产业联合会发布,主要用于摄像设备上,摄像产业把Exif作为行业的元数据(metadata)交换格式
- JPEG/JFIF文件格式标准是为了方便JPEG压缩图像在广泛的平台和应用间以最小的存储空间代价进行交换而设计的,它不包含JPEG/TIFF标准任何高级特性。
二、图片元数据(Metadata)
元数据(Metadata),又称中介数据、中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息。用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。
图片元数据(Metadata) 是嵌入到图片文件中的一些标签。比较像文件属性,但是种类繁多。对于数码图像,目前常见的研数据有EXIF, IPTC和XMP三种:
- EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号、镜头、曝光、图片尺寸等信息
- IPTF:比如图片标题、关键字、说明、作者、版权等信息。主要是由人工在后期通过软件写入的数据。
- XMP:XMP实际上是一种元数据存储和管理的标准,可以将Exif,IPTC或其他的数据都按XMP统一的格式存放在图像文件中。 但是当將JPG转换为其它格式如png, pdf等时,由于这些格式都不支持Exif格式,所以Exif信息就会丢失。为了解决这个问题,Adobe公司推出用XMP管理元数据的方法,即将图像中的元数据如Exif,IPTC等都纳入XMP库中,由XMP管理。
元数据的嵌入方式因图像格式而异,不同格式的图像文件有不同的嵌入方式。如JPG、TIF就是EXIF。
三、Exif是什么?
Exif为Exchangeable Image File(可交换图像文件)的缩写,是专门为数码相机的照片设定的,就是用来记录拍摄图像时的各种信息:图像信息(厂商,分辨率等),相机拍摄记录(ISO,白平衡,饱和度,锐度等),缩略图(缩略图宽度,高度等),gps(拍摄时的经度,纬度,高度)等,将这些信息按照JPEG文件标准放在图像文件头部。
Exif所记录主要的几类信息:
- 拍摄信息
- 拍摄器材(机身、镜头、闪光灯等)
- 拍摄参数(快门速度、光圈F值、ISO速度、焦距、测光模式等)
- 图像处理数(锐化、对比度、饱和度、白平衡等)
- 图像描述及版权信息
- GPS定位数据
- 缩略图
Exif最初由日本电子工业发展协会(JEIDA --Japan Electronic Industry Development Association) 在1996年制定(1.0),1998年省级到了2.1版本,增加对了音频文件的支持。目前的最新版本是2.21 版。国际标准化组织(ISO)正在制订的相机文件设计标准(DCF -- Design role for Camera File system/相机文件系统设计规则)可能以Exif2.1为基础。
目前几乎新型的数码相机都使用Exif文件格式来存储图像.
四、EXIF与JPEG的关系
Basically, Exif file format is the same as JPEG file format. Exif inserts some of image/digicam information data and thumbnail image to JPEG in conformity to JPEG specification.Therefore you can view Exif format image files by JPEG compliant Internet browser/Picture viewer/Photo retouch software etc. as a usual JPEG image files.
Exif 文件实际是JPEG文件的一种,遵从JPEG标准,因此加入 EXIF 信息并不影响 JPEG 文件的查看。只是在文件头信息中增加了有关拍摄信息的内容和索引图。所以我们可以使用任何支持JPEG格式的图像工具软件观看或修改Exif文件,但打开时可能看不到Exif信息,一旦修改,Exif信息可能丢失。
简单来说,EXIF 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部, 也就是说 EXIF 信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,主要包括摄影时的光圈、快门、ISO、日期时间等各种与当时摄影条件相关的讯息,相机品牌型号,色彩编码,拍摄时录制的声音以及全球定位系统(GPS)等信息。
五、JPEG两种文件结构的基本样式
前面我们知道JPEG文件是由各种段组成:
| Marker名称 | Marker内容 | 说明 |
|---|---|---|
| SOI | 0xFFD8 | Start Of Image |
| SOF0 | 0xFFC0 | Start Of Frame 0 |
| SOF2 | 0xFFC2 | Start of Frame 2 |
| DHT | 0xFFC4 | Define Huffman Table(s) |
| DQT | 0xFFDB | Define Quantization Table(s) |
| DRI | 0xFFDD | Define Restart Interval |
| SOS | 0xFFDA | Start of Scan |
| RST0~RST7 | 0xFFD0 ~ 0xFFD7 | Restart |
| APP0~APP15 | 0xFFE0 ~ 0xFFEF | Application-sepcific |
| COM | 0xFFFE | Comment |
| EOI | 0xFFD9 | End of Image |
0xFFE0~0xFFEF之间的标记被叫做 "应用标记", 它们在JPEG图像解码中不是必须存在的. 它们被使用于用户的应用程序之中。例如, 老款的olympus/canon/casio/agfa 数字相机使用 JFIF(JPEG文件交换格式/JPEG File Interchange Format)来存储图像。 JFIF 使用 APP0(0xFFE0) 标记来插入数字相机的配置信息数据和缩略图。Exif和JFIF的文件结构比较如下:

其实大部分字段都是一样的,主要区别就在APP0和APP1:
- This is APP0

- This is APP1

可以看到APP1明显多了很多的数据。