Exif 信息

大概翻译了一下,非常的粗糙,慢慢修正。请高手自动飘过~

因为做图像压缩时会损失相机写入的如光圈、快门等信息,所以自己写了个图像压缩小玩意,顺便研究了一下Exif。

原文地址:Exif file format


JPEG格式和标志

JPEG文件都是以十六进制 '0xFFD8'开始,以'0xFFD9'结束。在JPEG数据中有像'0xFF**'这样的数据,这些被称为“标志”,它表示JPEG信息数据段。0xFFD8 表示SOI(Start of image 图像开始),0xFFD9表示EOI(End of image 图像结束)。这两个特殊的标志没有附加的数据,而其他的标志在标志后都带有附加的数据。基本的标志格式如下:

0xFF + 标志数字(1字节) + 数据大小(2字节) + 数据(n字节)

数据大小 (2字节) 是大端顺序表示(Motorola方式),从高字节开始。请注意“数据”包含了数据大小的描述,如果一个标志为:

FF C1 00 0C

则表示标志0xFFC1有0x000C(十进制12)个字节的数据,但是数据的大小 '12' 也包含了记录“数据大小”的字节,所以在0x000C 后面只有10个字节的数据量。

在JPEG格式中,一些标志描绘数据后,跟着的就是SOS(Start of stream 数据流开始)标志。在SOS标志之后,就是JPEG图像流,直到EOI标志终结。

SOI MarkerMarker XX size=SSSSMarker YY size=TTTTSOS Marker size=UUUUImage streamEOI Marker

FFD8FFXXSSSSDDDD......FFYYTTTTDDDD......FFDAUUUUDDDD....I I I I....FFD9

Exif中使用的标志

从0xFFE0 ~ 0xFFEF 的标志是“应用程序标志”,在解码JPEG 图像的时候不是必需使用的。这些标志被用在用户应用中。例如:老款的Olympus(奥林巴斯)、canon(佳能)、casio(卡西欧)、Agfa(爱克发)的数码相机使用JFIF(JPEG档案交换格式)来存储相片的。JFIF使用APP0(0xFFE0)标志来插入数码相机的配置数据和缩略图的。


Exif也使用应用程序标志来插入数据,但是Exif使用APP1(0xFFE1)标志以避免和JFIF格式冲突。每个Exif文件格式都是从下面格式开始的:

SOI MarkerAPP1 MarkerAPP1 DataOther Marker

FFD8FFE1SSSS 457869660000 TTTT......FFXX SSSS DDDD......


从SOI(0xFFD8)标志开始,所以这是一个JPEG文件。后面随即跟着个一个APP1标志。所有的Exif数据都储存在APP1数据区中。在上表中的 "SSSS" 部分表示APP1数据(Exif 数据区域)的大小。请注意其大小"SSSS"包括大小描述"SSSS"其本身。


APP1的数据从"SSSS"后开始。第一部分是特殊数据,使用ASCII字符"Exif"和两个字节的 0x00 ,它定义了是否使用Exif。


APP1标志数据之后,是其他JPEG标志。


Exif数据结构

大略的Exif数据结构(APP1)如下。它采用了"Intel"的小端字节顺序方案,且包含JPEG格式的缩略图。总体上,Exif数据是从ASCII字符"Exif"和2个字节的0x00开始,后面就是Exif的数据了。Exif使用TIFF格式来存储数据。想知道更多关于TIFF格式内容,请浏览"TIFF6.0 specification"


FFE1APP1 Marker

SSSSAPP1 DataAPP1 Data Size

45786966 0000Exif Header

49492A00 08000000TIFF Header

XXXX. . . . IFD0 (main image)Directory

LLLLLLLLLink to IFD1

XXXX. . . . Data area of IFD0

XXXX. . . .   Exif SubIFDDirectory

00000000End of Link

XXXX. . . . Data area of Exif SubIFD

XXXX. . . .   Interoperability IFDDirectory

00000000End of Link

XXXX. . . . Data area of Interoperability IFD

XXXX. . . . Makernote IFDDirectory

00000000End of Link

XXXX. . . . Data area of Makernote IFD

XXXX. . . . IFD1(thumbnail image)Directory

00000000End of Link

XXXX. . . . Data area of IFD1

FFD8XXXX. . . XXXXFFD9Thumbnail image


TIFF头的格式

TIFF头指的是TIFF格式的前8个字节。前两个字节定义了TIFF数据采用何种字节顺序。如果是0x4949 = "II",表示采用"Intel"的小端字节顺序,如果为0x4d4d = ''MM",表示采用"Motorola"的大端字节顺序。例如:值'305,419,896'用十六进制表示为0x12345678.在Motorola的大端字节顺序中以0x12,0x34,0x56,0x78的顺序存储。如果采用Intel的小端字节顺序,则以0x78,0x56,0x34,0x12的顺序存储。现在来看,大多数数码相机采用Intel的方式。Ricoh(理光)采用了Motorola的方式。Sony(索尼)除了D700都采用Intel的的字节顺序。Kodak(柯达)DC200/210/240采用Motorola方式,但是DC220/260使用PowerPC却采用了Intel的方式!因此我们在获取Exif数据时,必须每次都确认它的字节顺序。虽然JPEG数据只采用Motorola方式的字节顺序,但Exif却允许采用两种方式。我不明白为什么Exif不修改字节顺序为Motorola方式。


然后的两个字节总是2个字节长度的0x002A。如果数据采用Intel的字节顺序,这两个字节为"0x2A,0x00"。如果采用Motorola的字节顺序,则为"0x00,0x2A"。TIFF头的最后4个字节是第一个IFD(Image File Directory, described in next chapter 图像文件目录,描述下一个字符)的偏移量。在TIFF格式中所有的偏移量都是从TIFF头的第一个字节("II"或者"MM")开始计算的到所在位置的字节数目,这个偏移量也不例外。通常第一个IFD是紧跟在TIFF头后面的,所以它的偏移量为'0x00000008'。

Byte alignTAG MarkOffset to first IFD

"I I" or "MM"0x002a0x00000008

IFD:图像文件目录(Image file directory )

接着TIFF头的是第一个IFD。它包含了图像信息数据。在下表中,开始的两个字节('EEEE')表示这个IFD所包含的目录实体数量。然后紧跟着就是实体对象(每个实体12个字节)。在最后一个目录实体后面有一个4字节大小的数据(表中的是'LLLLLLLL'),它表示下一个IFD的偏移量。如果这个偏移量的值是'0x00000000',就表示这个IFD是最后一个IFD。

EEEENo. of directory entry

TTTTffffNNNNNNNNDDDDDDDDEntry 0

TTTTffffNNNNNNNNDDDDDDDDEntry 1

. . . . . . . . .. . . . . .

TTTTffffNNNNNNNNDDDDDDDDEntry EEEE-1

LLLLLLLLOffset to next IFD


上表中的'TTTT'(2字节)是标签号,代表各种数据。'ffff'(2字节)是数据格式。'NNNNNNNN'(4字节)是组成元素的数量。'DDDDDDDD'(4字节) 包含数据本身或者数据的偏移量。

数据格式

数据格式(上表中的'FFFF')如下表所定义的一样。"rational"表示一个分数,它包含两个signed/unsigned long integer值并且第一个为分子,第二个为分母。

Value123456

Formatunsigned byteascii stringsunsigned shortunsigned longunsigned rationalsigned byte

Bytes/component112481

Value789101112

Formatundefinedsigned shortsigned longsigned rationalsingle floatdouble float

Bytes/component124848


你可以用组成元素的字节数('bytes/components')的值(见上表)乘以储存在'NNNNNNNN'区域中的组成元素的数量得到数据总长度。如果这个总长度小于4个字节,那么'DDDDDDDD'中的是这个标签(Tag)的值。如果总长度大于等于4个字节,'DDDDDDDD'中的是数据存储地址的偏移量。

IFD数据结构

在Exif格式中,第一个IFD是IFD0(主图像的IFD),它链接着IFD1(缩略图的IFD)后IFD链终止。带式IFD0/IFD1不包含像快门速度,焦距等任何数码相机的信息。IFD0总是包含特殊的标签(Tag)Exif的偏移量(0x8769) ,它说明道Exif SubIFD(子IFD)的偏移量。Exif SubIFD(子IFD)也是IFD的格式,它包含了数码相机的信息。、


Exif格式的扩展方案(Exif2.1/DCF)中,Exif SubIFD 包含了特殊标签 Exif互用偏移量(Exif Interoperability Offset)(0xA005。它指向互用的IFD(Interoperability IFD)。在DCF(数码相机格式)规范中,这个标签是必须的且子IFD(SubIFD(主图像IFD))和IFD1(缩略图IFD)都可以带使用互用的IFD(Interoperability IFD)。通常,只有主图像使用带有这个标签。


一些数码相机使用IFD数据格式来表示制造商数据——制造商特殊的神秘数字区。要小心的编写程序,因为很难区分制造商数据是否使用了IFD格式。附录中有一些制造商数据的信息。


0000: 49 49 2A 00 08 00 00 00-02 00 1A 01 05 00 01 00

0010: 00 00 26 00 00 00 69 87-04 00 01 00 00 00 11 02

0020: 00 00 40 00 00 00 48 00-00 00 01 00 00 00


如果上面数据为TIFF数据的第一个部分,那么可以解释为:

 头两个字节为"II",是'Intel'的字节顺序;

 地址0x0004~0x0007是 is 0x08000000,IFD0从地址'0x0008'开始;

 地址 0x0008~0x0009 是 0x0200,吗,IFD0有2个目录实体;

 地址 0x000a~0x000b 是 0x1A01, 表示这是一个水平分辨率(XResolution)(0x011A)标签,它包含了图像的水平分辨率;

 地址 0x000c~0x000d 是 0x0500,,这个值表示的格式是无符号分数(unsigned rational)(0x0005);

 地址 0x000e~0x0011 是 0x01000000,,组成元素数量是'1',无符号分数(unsigned rational)的尺寸是8字节,所有数据总长度为 1 ×8 = 8字节;

 数据总长度大于4个字节,所以接下的4个字节是数据的偏移量;

 地址0x0012~0x0015 是 0x26000000,水平分辨率(XResolution)的数据存储在0x0026;

 地址0x0026~0x0029 是 0x48000000,分子是72,地址0x002a~0x002d是0x0100000000,分母是 '1'。所以水平分辨率(XResolution)是72/1;

 地址0x0016~0x0017是0x6987,下一个标签是Exif偏移(ExifOffset)(0x8769)。它的值是Exif子IFD(Exif SubIFD的偏移量;

 数据格式是0x0004,无符号长整型(unsigned long integer);

 这个标签有一个元素。无符号长整型(unsigned long integer)长度为4个字节,所以数据总长度为4字节;

 总数据长度等于4字节,接下的4个字节是Exif子IFD(Exif SubIFD)的偏移量;

 地址0x001e~0x0021是0x11020000,Exif子IFD(Exif SubIFD)从'0x0211'开始;

 这是最后一个目录实体,接下的4个字节表示下一个IFD的偏移量;

 地址0x0022~0x0025 是 0x40000000,下一个IFD从'0x0040'开始。


缩略图

Exif格式包含图像的缩略图(除了Ricoh (理光)RDC-300Z)。缩略图通常在IFD1后面。共有3种格式的缩略图:JPEG格式(JPEG 使用YCbCr),RGB TIFF格式,YcbCr TIFF 格式。现在Exif 2.1 或者更高版本是推荐使用JPEG格式和160×120的缩略图。而DCF规范则必须使用JPEG格式和160×120的缩略图。


JPEG格式缩略图

如果IFD1中压缩(Compression)(0x0103)标签的值为 '6 ',那么缩略图是JPEG格式。大多数的Exif图像使用JPEG格式的缩略图。在这些图像中,你可以在IFD1中JpegIFOffset(0x0201)标签中,以及JpegIFByteCount(0x0202)标签中分别获得缩略图的偏移量和大小。其数据格式为普通的JPEG格式,从0xFFD8 开始,到 0xFFD9结束。


TIFF格式缩略图

如果IFD1中压缩(Compression)(0x0103)标签的值为 '1 ',那么说缩略图是非压缩的(TIFF格式)。缩略图的起点数据在StripOffset(0x0111)标签,缩略图大小则是StripByteCounts(0x0117)标签的和。

如果缩略图是无压缩的且IFD1中标签PhotometricInterpretation(0x0106)的值为'2',则缩略图采用RGB格式。在这种情况中,你可以通过那数据复制到计算机中RGB格式(如BMP格式,或者复制到VRAM目录)等简单方法查看缩略图。Kodak(柯达)DC -210/220/260 就是使用这种格式。需要说明的是,TIFF用'RGB'的顺序储存像素数据,而BMP格式采用BGR顺序。

如果标签值为'2',那么缩略图采用YcbCr格式。如果你想查看缩略图,你必须要把它转换为RGB。Ricoh(理光)RDC4200/4300, Fuji(富士) DS-7/300 and DX-5/7/9 都是用这种格式(比较新的RDC5000/MX-X00系列使用JPEG格式)。Next section is brief description to conversion of Fuji DS's thumbnail. For more details, refer to TIFF6.0 specification.

At DX-5/7/9, YCbCrSubsampling(0x0212) has values of '2,1', PlanarConfiguration(0x011c) has a value '1'. So the data align of this image is below.

Y(0,0),Y(1,0),Cb(0,0),Cr(0,0), Y(2,0),Y(3,0),Cb(2,0),Cr(3.0), Y(4,0),Y(5,0),Cb(4,0),Cr(4,0). . . .

The numeric in parenthesis is pixel coordinates. DX series' YCbCrCoefficients(0x0211) has values '0.299/0.587/0.114', ReferenceBlackWhite(0x0214) has values '0,255,128,255,128,255'. Therefore to convert from Y/Cb/Cr to RGB is;

B(0,0)=(Cb-128)*(2-0.114*2)+Y(0,0)

R(0,0)=(Cr-128)*(2-0.299*2)+Y(0,0)

G(0,0)=(Y(0,0)-0.114*B(0,0)-0.299*R(0,0))/0.587

Horizontal subsampling is a value '2', so you can calculate B(1,0)/R(1,0)/G(1,0) by using the Y(1,0) and Cr(0,0)/Cb(0,0). Repeat this conversion by value of ImageWidth(0x0100) and ImageLength(0x0101).


Exif/TIFF 中使用的标签号

Exif/TIFF 中使用的标签号如下所示。如果标签的元素数量有限制,则CompoNo列就是最大允许的元素个数,如果CompoNo列为空,代表没有限制。

IFD0 中使用的标签(主图像)

Tag No.标签名称格式CompoNoDesc.

0x010eImageDescription

(图像描述)

ascii string描述相片,不支持双字节的字符,如汉语、韩语、日语

0x010fMake

(制造商)

ascii string数码相机制造商。在Exif标准中是可选的,但在DCF(数码相机格式)中是必需的。

0x0110Model

(型号)

ascii string数码相机型号。在Exif标准中是可选的,但在DCF(数码相机格式)中是必需的。

0x0112Orientation

(方向)

unsigned short1Value0th Row0th Column

1topleft side

2topright side

3bottomright side

4bottomleft side

5left sidetop

6right sidetop

7right sidebottom

8left sidebottom

The orientation of the camera relative to the scene, when the image was captured. The relation of the '0th row' and '0th column' to visual position is shown as right.

拍摄时的相机方向(横向还是纵向,那边朝上)。……

0x011aXresolution

(水平分辨率)

unsigned rational1图像显示、打印的分辨率。默认值值是每英寸72像素,但是因为个人计算机不使用这个值来显示或者打印,所以这个值没有意义。

0x011bYresolution

(垂直分辨率)

unsigned rational1

0x0128ResolutionUnit

(分辨率单位)

unsigned short1水平或者垂直分辨率XResolution(0x011a)/YResolution(0x011b)的单位,'1''表示没有单位,'2'表示英寸,'3'表示厘米。默认为'2'。

0x0131Software

(软件)

ascii stringShows firmware(internal software of digicam) version number.

固件(数码相机内软件)版本号。

0x0132DateTime

(日期时间)

ascii string20图像最后修改的日期时间。日期格式为"YYYY:MM:DD HH:MM:SS" + 0x00,一共20字节。如果没有设置时钟或者数码相机没有时钟,这个区域可填充空格。通常,这个标签的值与DateTimeOriginal(0x9003)的值相同。

0x013eWhitePoint

(白点)

unsigned rational2定义了图像白点的色度。如果图像使用CIE(国际照明委员会)标准亮度D65(被认为是‘阳光’的标准)的光源,这个值为'3127/10000,3290/10000'。

0x013fPrimaryChromaticities

(原色色度)

unsigned rational6定义了原色的色度。如果图像使用CCIR推荐709原色方案,这个值应该为'640/1000,330/1000,300/1000,600/1000,150/1000,0/1000'。

0x0211YcbCrCoefficients

(颜色空间转换矩阵系数)

unsigned rational3当图像格式为YcbCr时,这个值包含一个与RGB格式转换的常量参数。通常,这个值为'0.299/0.587/0.114'。

0x0213YcbCrPositioning

(YcbCr配置)

unsigned short1When image format is YCbCr and uses 'Subsampling'(cropping of chroma data, all the digicam do that), defines the chroma sample point of subsampling pixel array. '1' means the center of pixel array, '2' means the datum point.

当图像格式为YCbCr且使用部分采样(色度数据的取样,所有数码相机都会这么做)时,定义了部分抽样像素数组的色度样本点。'1'表示像素数组的中间,'2'表示基准点。

0x0214ReferenceBlackWhite

(黑白参照值对)

unsigned rational6Shows reference value of black point/white point. In case of YCbCr format, first 2 show black/white of Y, next 2 are Cb, last 2 are Cr. In case of RGB format, first 2 show black/white of R, next 2 are G, last 2 are B.

黑白点参照值。在YcbCr格式的方案中,头2字节表示Y的黑白参照值,接下来的2字节是Cb的,最后2字节是Cr的。在RGB格式方案中,头2字节表示R的黑白参照值,接下来的2字节是G的,最后2字节是B的。

0x8298Copyright

(版权)

ascii stringShows copyright information

版权信息

0x8769ExifOffsetunsigned long1Offset to Exif Sub IFD

子IFD的偏移量


Exif SubIFD(子标签)中使用的标签

Tag No.标签名称格式CompoNoDesc.

0x829aExposureTime

(曝光时间)

unsigned rational1曝光时间(快门速度的倒数)。以秒为单位。

0x829dFnumber

(焦距)

unsigned rational1获取图像使用的焦距(光圈)。

0x8822ExposureProgram

(曝光方式)

unsigned short1Exposure program that the camera used when image was taken. '1' means manual control, '2' program normal, '3' aperture priority, '4' shutter priority, '5' program creative (slow program), '6' program action(high-speed program), '7' portrait mode, '8' landscape mode.

拍摄图像时相机的曝光程序(曝光方式)。'1'表示手动控制;'2' '3'光圈优先; '4'快门优先;'5''6''7''8

0x8827ISOSpeedRatings

(ISO)

unsigned short2CCD sensitivity equivalent to Ag-Hr film speedrate.

0x9000ExifVersion

(Exif版本)

undefined4Exif version number. Stored as 4bytes of ASCII character. If the picture is based on Exif V2.1, value is "0210". Since the type is 'undefined', there is no NULL(0x00) for termination.

Exif版本号。用4字节的ASCII字符保存。如果图像基于Exif v2.1,其值为"0210"。由于类型为‘未定义’,所以结尾没有NULL(0x00)值。

0x9003DateTimeOriginal

(原始图像采集的时间)

ascii string20原始图像采集时的时间。这个值不能被用户的程序修改。时间格式为"YYYY:MM:DD HH:MM:SS" + 0x00,共20字节。如果没有设定时钟或者数码相机没有时钟,这个区域可填充空格。在Exif标准中,这个标签是可选的,但在DCF标准中时必须的。

通常,这个标签的值与DateTimeOriginal(0x0132)的值相同。

0x9004DateTimeDigitized

(原始图像被数字化编码时的时间)

ascii string20图像被数字化的时间。通常和DateTimeOriginal(原始图像采集的时间)(0x9003)相同。时间格式为"YYYY:MM:DD HH:MM:SS" + 0x00,共20字节。如果没有设定时钟或者数码相机没有时钟,这个区域可填充空格。在Exif标准中,这个标签是可选的,但在DCF标准中时必须的。

0x9101ComponentsConfiguration

(像素颜色构成顺序)

undefinedShows the order of pixel data. Most of case '0x04,0x05,0x06,0x00' is used for RGB-format and '0x01,0x02,0x03,0x00' for YCbCr-format. 0x00:does not exist, 0x01:Y, 0x02:Cb, 0x03:Cr, 0x04:Red, 0x05:Green, 0x06:Bllue.

像素数据种色彩的顺序。大多数都采用RGB格式为'0x04,0x05,0x06,0x00',YcbCr格式为'0x01,0x02,0x03,0x00'的方案。0x00:不存在;0x01: Y; 0x02: Cb; 0x03: Cr; 0x04: Red,;0x05: Green; 0x06: Blue.

0x9102CompressedBitsPerPixel

每个像素的压缩位

unsigned rational1The average compression ratio of JPEG (rough estimate).

JPEG的平均压缩率(粗略估计)。

0x9201ShutterSpeedValue

(快门速度APEX值)

signed rational1Shutter speed by APEX value. To convert this value to ordinary 'Shutter Speed'; calculate this value's power of 2, then reciprocal. For example, if the ShutterSpeedValue is '4', shutter speed is 1/(24)=1/16 second.

快门速度的APEX值。要来转化为平常的“快门速度”,计算方法为2的这个值为幂次方,在倒数。举例,如果ShutterSpeedValue(快门速度APEX值)为4则快门速度为1/(24)=1/16 秒。

0x9202ApertureValue

(光圈)

unsigned rational1The actual aperture value of lens when the image was t

获取图像时实际的光圈值。单位是APEX。要转换原始光圈,对 求这个值次幂。举例:如果ApertureValue(光圈)为'5',光圈(F-number(F-stop),)为1.41425 = F5.6。

0x9203BrightnessValue

(亮度)

signed rational1Brightness of taken subject, unit is APEX. To calculate Exposure(Ev) from BrigtnessValue(Bv), you must add SensitivityValue(Sv).Ev=Bv+Sv   Sv=log2(ISOSpeedRating/3.125)

ISO100:Sv=5, ISO200:Sv=6, ISO400:Sv=7, ISO125:Sv=5.32.

物体的亮度,单位是APEX。曝光量(EV)等于亮度(BV )加上感光度(SV)。

Ev=Bv+Sv   Sv=log2(ISOSpeedRating/3.125)

ISO100:Sv=5, ISO200:Sv=6, ISO400:Sv=7, ISO125:Sv=5.32.

0x9204ExposureBiasValue

(曝光补偿)

signed rational1Exposure bias(compensation) value of taking picture. Unit is APEX(EV).

拍摄时的曝光补偿(EV),单位是APEX(EV)。

0x9205MaxApertureValue

(最大光圈)

unsigned rational1Maximum aperture value of lens. You can convert to F-number by calculating power of root 2 (same process of ApertureValue:0x9202).

镜头的最大光圈。以 为底,这个值为幂,等到的值就是焦距(计算方法同ApertureValue

(光圈)(0x0902)一样)。

0x9206SubjectDistance

(物距)

signed rational1Distance to focus point, unit is meter.

到焦点的距离,单位是米。

0x9207MeteringMode

测光方式

unsigned short1Exposure metering method. '0' means unknown, '1' average, '2' center weighted average, '3' spot, '4' multi-spot, '5' multi-segment, '6' partial, '255' other.

测光方式。0、未知;1、平均测光;2、中心重点平均;3、单点测光;4、多点测光;5、矩阵测光;6、局部测光;255、其他。

0x9208LightSource

(光源,白平衡)

unsigned short1光源,实际表示白平衡设置。0、未知;1、日光;2、荧光灯;3、钨丝灯;10、闪光灯;17、标准光线A;18、标准光线B;19、标准光线C;20、D55;21、D65;22、D75;255、其他。

0x9209Flash

(闪光)

unsigned short1'0' means flash did not fire, '1' flash fired, '5' flash fired but strobe return light not detected, '7' flash fired and strobe return light detected.

0、没有使用闪光灯;1、使用闪光灯;5、闪光但没有检测到;闪光且检测到。

0x920aFocalLength

(焦距)

unsigned rational1Focal length of lens used to take image. Unit is millimeter.

拍摄时焦距,单位为毫米。

0x927cMakerNote

(制造商标记)

undefinedMaker dependent internal data. Some of maker such as Olympus/Nikon/Sanyo etc. uses IFD format for this area.

制造商内置数据,如奥林巴斯、尼康、三洋等。这区域使用IFD格式

0x9286UserComment

(用户注释)

undefinedStores user comment. This tag allows to use two-byte character code or unicode. First 8 bytes describe the character code. 'JIS' is a Japanese character code (known as Kanji).

储存用户注释。这个标签允许使用双字节字符或Unicode。前8个字节指示字节编码。'JIS'是日本字符编码(日本汉字)。

'0x41,0x53,0x43,0x49,0x49,0x00,0x00,0x00':ASCII

'0x4a,0x49,0x53,0x00,0x00,0x00,0x00,0x00':JIS

'0x55,0x4e,0x49,0x43,0x4f,0x44,0x45,0x00':Unicode

'0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00':Undefined

0x9290SubsecTime

(亚秒时间)

ascii stringSome of digicam can take 2~30 pictures per second, but DateTime/DateTimeOriginal/DateTimeDigitized tag can't record the sub-second time. SubsecTime tag is used to record it.

For example, DateTimeOriginal = "1996:09:01 09:15:30", SubSecTimeOriginal = "130", Combined original time is "1996:09:01 09:15:30.130"

一些数码相机可以在一秒钟内拍摄2~30张相片,但是DateTime(时间)、DateTimeOriginal(采像时间)、DateTimeDigitized(编码时间)标签都无法记录比秒更小的时间。这时可以使用SubsecTime(亚秒时间)标签来记录亚秒时间。

例如:DateTimeOriginal(采像时间) = "1996:09:01 09:15:30", SubSecTimeOriginal(采像亚秒时间) = "130", 合并采像时间后市 "1996:09:01 09:15:30.130"。

0x9291SubsecTimeOriginal

(采像亚秒时间)

ascii string

0x9292SubsecTimeDigitized

(采像编码时间)

ascii string

0xa000FlashPixVersion

(FlashPix版本)

undefined4Stores FlashPix version. If the image data is based on FlashPix formar Ver.1.0, value is "0100". Since the type is 'undefined', there is no NULL(0x00) for termination.

储存FlashPix版本。如果图像数据是基于FlashPix Ver1.0,那么这个值就是"0100"。由于类型是‘未定义’,所以结尾没有NULL(0x00)。

0xa001ColorSpace

(色彩空间)

unsigned short1Defines Color Space. DCF image must use sRGB color space so value is always '1'. If the picture uses the other color space, value is '65535':Uncalibrated.

定义色彩空间。DCF图像必须使用sRGB色彩空间,其值为'1'。如果图像使用其他色彩空间,其值为'65535':非标准。

0xa002ExifImageWidth

(图宽)

unsigned short/long1Size of main image.

主图像的尺寸。

0xa003ExifImageHeight

(图高)

unsigned short/long1

0xa004RelatedSoundFile

(相关音频文件)

ascii stringIf this digicam can record audio data with image, shows name of audio data.

如果数码相机记录了图像的音频数据,音频数据的名称保存在这个标签。

0xa005ExifInteroperabilityOffsetunsigned long1Extension of "ExifR98", detail is unknown. This value is offset to IFD format data. Currently there are 2 directory entries, first one is Tag0x0001, value is "R98", next is Tag0x0002, value is "0100".

"ExifR98"的扩展,细节未知。这个值IFD格式数据的偏移量。目前有两个目录实体,第一个是标签0x0001,值为"R98"。第二个是标签0x0002,值为"0100"。

0xa20eFocalPlaneXResolutio

(水平分辨率)

unsigned rational1Pixel density at CCD's position. If you have MegaPixel digicam and take a picture by lower resolution(e.g.VGA mode), this value is re-sampled by picture resolution. In such case, FocalPlaneResolution is not same as CCD's actual resolution.

CCD上的像素密度。如果一台百兆像素相机使用较低的分辨率(如VGA模式),此值是图像分辨率的重新取样。在一些情况中,FocalPlaneResolution(分辨率)与CCD的实际分辨率不同。

0xa20fFocalPlaneYResolution

(垂直分辨率)

unsigned rational1

0xa210FocalPlaneResolutionUnit

(分辨率单位)

unsigned short1Unit of FocalPlaneXResoluton/FocalPlaneYResolution. '1' means no-unit, '2' inch, '3' centimeter. 

Note:Some of Fujifilm's digicam(e.g.FX2700,FX2900,Finepix4700Z/40i etc) uses value '3' so it must be 'centimeter', but it seems that they use a '8.3mm?'(1/3in.?) to their ResolutionUnit. Fuji's BUG? Finepix4900Z has been changed to use value '2' but it doesn't match to actual value also.


FocalPlaneXResoluton(水平分辨率)、FocalPlaneYResolution(垂直分辨率)的单位。1、无单位;2、英寸;3、厘米。

注意:一些富士的数码相机(例如FX2700、FX2900、Finepix4700/40i等)的值为3,所以单位是‘厘米’,但实际上使用了'8.3mm'(1/3in.?)作为其单位。这是富士相机的BUG?Finepix4900Z已改此值使用2 ,但是还是没有同实际的值相吻合。

0xa215ExposureIndex

(曝光量)

unsigned rational1Same as ISOSpeedRatings(0x8827) but data type is unsigned rational. Only Kodak's digicam uses this tag instead of ISOSpeedRating, I don't know why(historical reason?).

与ISOSpeedRatings(0x8827)(ISO)的值相同,但用(unsigned rational)无符号分数表示。只有柯达的数码相机使用这个标签而不用ISOSpeedRating(ISO)。

0xa217SensingMethod

(传感方式)

unsigned short1Shows type of image sensor unit. '2' means 1 chip color area sensor, most of all digicam use this type.

图像传感器单位类型。2表示1个彩色区域传感器芯片,大多数数码相机使用这种类型。

0xa300FileSource

(文件源)

undefined1Indicates the image source. Value '0x03' means the image source is digital still camera.

指出图像源。'0x03'表示图像源是数码相机。

0xa301SceneType

(场景类型)

undefined1Indicates the type of scene. Value '0x01' means that the image was directly photographed.

指明场景的类型。值为'0x01'表示图像时直接拍摄。

0xa302CFAPatternundefinedIndicates the Color filter array(CFA) geometric pattern.

指明色彩滤镜矩阵(CFA)几何样式

Length

长度

Type

类型

Meaning

意义

2shortHorizontal repeat pixel unit = n

水平重复单位像素 = n

2shortVertical repeat pixel unit = m

垂直重复单位像素 = m

1byteCFA value[0,0]

(CFA的值[0,0])

:::

1byteCFA value[n-1,0]

1byteCFA value[0,1]

:::

1byteCFA value[n-1,m-1]

The relation of filter color to CFA value is shown below.

CFA的值表示的色彩滤镜如下表:

Filter ColorRedGreenBlueCyanMagentaYellowWhite

CFA value0123456


RG

GB

For example, ordinary RGB filter uses the repetition of left chart, the value is '0x0002,0x0002,0x00,0x01,0x01,0x02'.


距离说明:一个普通RGB滤镜使用了左图的滤镜,他的值就为:'0x0002,0x0002,0x00,0x01,0x01,0x02'。


互用(Interoperability) IFD中使用的标签

Tag No.标签名称格式CompoNoDesc.

0x0001InteroperabilityIndex

(互用索引)

Ascii string4If this IFD is main image's IFD and the file content is equivalent to ExifR98 v1.0, the value is "R98". If thumbnail image's, value is "THM".

如果这个IFD是主图像的IFD且文件内容与EixfR98 V1.0相当,那么值为"R98"。如果是缩略图的IFD,值为"THM"。

0x0002InteroperabilityVersion

(互用版本)

Undefined4Records the interoperability version. "0100" means version 1.00.

记录互用版本。"0100"表示V1.00。

0x1000RelatedImageFileFormat

(图像文件格式)

Ascii stringanyRecords the file format of image file. Value is ascii string (e.g. "Exif JPEG Ver. 2.1").

记录图像的文件格式。值为ASCII字符串

(例如:"Exif JPEG Ver.2.1")

0x1001RelatedImageWidth

(图像宽度)

Short or Long1Records the image size.

图像尺寸

0x1001RelatedImageLength

(图像高度)

Short or Long1

IFD1 (缩略图)中使用的标签

Tag No.标签名称格式CompoNoDesc.

0x0100ImageWidth

(图像宽度)

unsigned short/long1Shows size of thumbnail image.

缩略图的尺寸

0x0101ImageLength

(图像高度)

unsigned short/long1

0x0102BitsPerSample

(分量位数)

unsigned short3When image format is no compression, this value shows the number of bits per component for each pixel. Usually this value is '8,8,8'

当图像采用未压缩的格式时,这个值表示每个分量用几个字节表示。通常这个值为'8,8,8'。

0x0103Compression

(压缩)

unsigned short1Shows compression method. '1' means no compression, '6' means JPEG compression.

压缩方法。1、不压缩;6、JPEG压缩。

0x0106PhotometricInterpretation

(色彩空间)

unsigned short1Shows the color space of the image data components. '1' means monochrome, '2' means RGB, '6' means YCbCr.

图像的色彩空。1、黑白;2、RGB;6、YcbCr。

0x0111StripOffsetsunsigned short/longWhen image format is no compression, this value shows offset to image data. In some case image data is striped and this value is plural.

当图像为非压缩格式时,这个值表示图像数据的偏移量。在一些时候,图像数据是带状存储的,这个值不止一个。

0x0115SamplesPerPixel

(每像素分量)

unsigned short1When image format is no compression, this value shows the number of components stored for each pixel. At color image, this value is '3'.

当图像采用未压缩格式的时候,这个值表示每个像素中的分量个数。彩色图像的值为3。

0x0116RowsPerStripunsigned short/long1When image format is no compression and image has stored as strip, this value shows how many rows stored to each strip. If image has not striped, this value is the same as ImageLength(0x0101).

当图像格式是非压缩的且图像带状存储,这个值就表示每带存储多少行。如果图像不是带状存储的,这个值等于图像高度ImageLength(0x0101)。

0x0117StripByteConuntsunsigned short/longWhen image format is no compression and stored as strip, this value shows how many bytes used for each strip and this value is plural. If image has not stripped, this value is single and means whole data size of image.

当图像未压缩并以带状存储时,这个值表示每带有多少直接且此值不止一个。如果图像不是带状存储,这个值只有一个且表示整个图像的尺寸。

0x011aXresolution

(水平分辨率)

unsigned rational1Display/Print resolution of image. Large number of digicam uses 1/72inch, but it has no mean because personal computer doesn't use this value to display/print out.

图像显示或者打印的分辨率。大部分数码相机为1/72英寸,但是因为计算年不按这个值来答应和显示图像,所以此值没有意义。

0x011bYresolution

(垂直分辨率)

unsigned rational1

0x011cPlanarConfiguration

(平面配置)

unsigned short1When image format is no compression YCbCr, this value shows byte aligns of YCbCr data. If value is '1', Y/Cb/Cr value is chunky format, contiguous for each subsampling pixel. If value is '2', Y/Cb/Cr value is separated and stored to Y plane/Cb plane/Cr plane format.

当图像格式是不压缩的YcbCr时,这个值表示YcbCr数据的排列顺序。1表示Y/Cb/Cr是紧凑格式,一像素数据相连。2表示Y/Cb/Cr值分开存储,以Y平面、Cb平面、Cr平面存储。

0x0128ResolutionUnit

(分辨率单位)

unsigned short1Unit of XResolution(0x011a)/YResolution(0x011b). '1' means inch, '2' means centimeter.

分辨率(XResolution(0x011a)/YResolution(0x011b))的单位。1、英寸;2、厘米。

0x0201JpegIFOffset

(Jpeg偏移量)

unsigned long1When image format is JPEG, this value show offset to JPEG data stored.

当图像格式为JPEG时的JPEG数据偏移量。

0x0202JpegIFByteCount

(Jpeg数据字节数)

unsigned long1When image format is JPEG, this value shows data size of JPEG image.

当图像格式为JPEG时,这个值表示JPEG图像数据有多少个字节。

0x0211YcbCrCoefficients

(YcbCr系数)

unsigned rational3When image format is YCbCr, this value shows constants to translate it to RGB format. In usual, '0.299/0.587/0.114' are used.

当图像为YcbCr格式时,这个值表示转换为RGB时的常量参数。通常这个值为'0.299/0.587/0.114'。

0x0212YcbCrSubSampling

(YcbCr子抽样)

unsigned short2When image format is YCbCr and uses subsampling(cropping of chroma data, all the digicam do that), this value shows how many chroma data subsampled. First value shows horizontal, next value shows vertical subsample rate.

当图像为YcbCr格式且二次抽样(裁剪色度数据,所有的数码相机都这么做)时,这个值表示有多少色度信息被二次抽样。第一个值是水平方向的、第二个值是垂直方向的抽样率。

0x0213YcbCrPositioning

(YCbCr抽象点)

unsigned short1When image format is YCbCr and uses 'Subsampling'(cropping of chroma data, all the digicam do that), this value defines the chroma sample point of subsampled pixel array. '1' means the center of pixel array, '2' means the datum point(0,0).

当图像为YcbCr格式且二次抽样(裁剪色度数据,所有的数码相机都这么做)时,这个值定义了子抽样中的色度样本点在像素数组中的位置。1、像素数组中心;2、基准点(0,0)。

0x0214ReferenceBlackWhite

(黑白参照值对)

unsigned rational6Shows reference value of black point/white point. In case of YCbCr format, first 2 show black/white of Y, next 2 are Cb, last 2 are Cr. In case of RGB format, first 2 show black/white of R, next 2 are G, last 2 are B.

黑白点参照值。在YcbCr格式的方案中,头2字节表示Y的黑白参照值,接下来的2字节是Cb的,最后2字节是Cr的。在RGB格式方案中,头2字节表示R的黑白参照值,接下来的2字节是G的,最后2字节是B的。


Misc Tags

Tag No.Tag NameFormatCompoNoDesc.

0x00feNewSubfileTypeunsigned long1

0x00ffSubfileTypeunsigned short1

0x012dTransferFunctionunsigned short3

0x013bArtist

(艺术家)

ascii string

0x013dPredictorunsigned short1

0x0142TileWidthunsigned short1

0x0143TileLengthunsigned short1

0x0144TileOffsetsunsigned long

0x0145TileByteCountsunsigned short

0x014aSubIFDsunsigned long

0x015bJPEGTablesundefined

0x828dCFARepeatPatternDimunsigned short2

0x828eCFAPatternunsigned byte

0x828fBatteryLevelunsigned rational1

0x83bbIPTC/NAAunsigned long

0x8773InterColorProfileundefined

0x8824SpectralSensitivityascii string

0x8825GPSInfounsigned long1

0x8828OECFundefined

0x8829Interlaceunsigned short1

0x882aTimeZoneOffsetsigned short1

0x882bSelfTimerModeunsigned short1

0x920bFlashEnergyunsigned rational1

0x920cSpatialFrequencyResponseundefined

0x920dNoiseundefined

0x9211ImageNumberunsigned long1

0x9212SecurityClassificationascii string1

0x9213ImageHistoryascii string

0x9214SubjectLocationunsigned short4

0x9215ExposureIndexunsigned rational1

0x9216TIFF/EPStandardIDunsigned byte4

0xa20bFlashEnergyunsigned rational1

0xa20cSpatialFrequencyResponseunsigned short1

0xa214SubjectLocationunsigned short1

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容