当前位置:[北京同好会]>[观测设备]>[20D]>[CR2 RAW文件(一)图片信息]

 

CANON CR2 RAW文件(一)图片信息

首先是8个字节的文件头。

CR2的前2个字节是"II",代表INTEL格式的存储顺序,即低字节在前,高字节在后。

接下来是固定的2个字节:0x2a00。

最后的4个字节的整数是指向第一个IFD(IMAGE FILE DIRECTORY)的绝对偏置量(起始位置)。

IFD的结构如下:
第一个2字节的整数表示在此IFD内的entry的数量,每个entry为12字节,顺序排列。最后一个entry之后的4字节整数代表下一个IFD的起始位置,如果是0,表示这是最后一个IFD。

ENTRY的结构如下:
第一个2字节的整数为tag,表示是哪种信息
第二个2字节的整数为type,表示单个数据的格式,对应的数据类型如表:

type值
1
2
3
4
5
6
格式
unsigned byte
ascii strings
unsigned short
unsigned long
unsigned rational
signed byte
单个数据字节数
1
1
2
4
8
1
type值
7
8
9
10
11
12
格式
undefined
signed short
signed long
signed rational
single float
double float
单个数据字节数
1
2
4
8
4
8

第三个4字节的整数为len,表示数据的个数

由type值可以确定单个数据占用的字节数,乘以len就是数据的总长度。如果数据总长不超过4个字节,则保存在entry最后的4个字节中;如果超过4个字节,则entry最后的4字节整数代表数据的存储位置相对文件头的偏置量。在该位置上可以读取数据。 根据这样的规则,就可以从raw文件中确定里面所含的每个IFD内的每个tag值,及按照type和len信息确定数据位置并读取。接下来是一个查表解读的过程。

在IFD中对应tag 0x8769的4位整数是指向另一个含有EXIF信息的子IFD的偏置量。

EXIF子IFD的结构与IFD相同,只是只有一个。

在EXIF子IFD中对应tag 0927c的4位整数是指向另一个含有MAKERNOTE信息的子IFD的偏置量。该子IFD的结构与IFD相同,也只有一个。

按照以上规则从CR2文件中顺序读出的内容为:

类别 编号 (HEX) TYPE LEN 名称 含义
order=
val=
ifd =
offset
entries
tiff 1 100 3 1 JpegImageWidth JPEG图宽度
tiff 2 101 3 1 JpegImageLength JPEG图高度
tiff 3 102 3 3 JpegBitsPerSample 每通道位数
tiff 4 103 3 1 Compression 压缩
tiff 5 10F 2 6 Maker 制造商
tiff 6 110 2 14 Model 相机型号
tiff 7 111 4 1 JpegStripOffsets JPEG图偏置值
tiff 8 112 3 1 Orientation 方向
tiff 9 117 4 1 JpegStripByteConunts JPEG图数据长度
tiff 10 11A 5 1 XResolution X分辨率
tiff 11 11B 5 1 YResolution Y分辨率
tiff 12 128 3 1 ResolutionUnit 分辨率单位
tiff 13 132 2 20 DateTime 修改时刻
tiff 14 8769 4 1 ExifOffset exif信息IFD的偏置量
exif entries
exif 1 829A 5 1 ExposureTime 曝光时间
exif 2 829D 5 1 FNumber 光圈
exif 3 8822 3 1 ExposureProgram 曝光程序
exif 4 8827 3 1 ISOSpeedRatings ISO值
exif 5 9000 7 4 ExifVersion exif版本
exif 6 9003 2 14 DateTimeOriginal 拍摄时刻
exif 7 9004 2 14 DateTimeDigitized 数字化时刻
exif 8 9101 7 4 ComponentsConfiguration
exif 9 9201 A 1 ShutterSpeedValue 比1秒快的级数
exif 10 9202 5 1 ApertureValue 比F1小的级数
exif 11 9204 A 1 ExposureBiasValue 补偿级数
exif 12 9207 3 1 MeteringMode 测光模式
exif 13 9209 3 1 Flash 闪光灯运行
exif 14 920A 5 1 FocalLength 镜头焦距
exif 15 927C 7 20A8 MakerNoteOffset makernote信息IFD的偏置量
makernote entries
make 1 1 3 46 CameraSettings1 相机设置1
make 2 2 3 4 CanonFocalLength 焦距
make 3 3 3 4
make 4 4 3 34 CameraSettings2 相机设置2
make 5 6 2 32 Image Type 图片类型
make 6 7 2 32 Firmware Version 硬件版本
make 7 9 2 32 Owner Name 拥有者
make 8 C 4 1 Camera Serial Number 序列号,为4字节整数值
make 9 D 7 1024
make 10 F 3 19 Custom Functions 用户设置
make 11 10 4 1
make 12 12 3 28 CanonPictureInfo 图像信息
make 13 13 3 4
make 14 15 4 1
make 15 19 3 1
make 16 83 4 1
make 17 93 3 16 CanonFileInfo 文件信息
make 18 A0 3 14 CanonColorInfo 色彩信息
make 19 AA 3 5
make 20 D0 4 1
make 21 E0 3 17
make 22 4001 3 582
make 23 4002 3 2676
make 24 4003 3 22
exif 16 9286 7 108 UserComment 用户备注
exif 17 A000 7 4 FlashPixVersion flashpix版本
exif 18 A001 3 1 ColorSpace 色彩空间
exif 19 A002 3 1 ExifImageWidth 主图像宽度
exif 20 A003 3 1 ExifImageHeight 主图像高度
exif 21 A005 4 1 ExifInteroperabilityOffset 指向IFD。描述互通性
exif 22 A20E 5 1 FocalPlaneXResolution 像面分辨率
exif 23 A20F 5 1 FocalPlaneYResolution 像面分辨率
exif 24 A210 3 1 FocalPlaneResolutionUnit 像面分辨率单位
exif 25 A401 3 1 CustomRendered 渲染方式?
exif 26 A402 3 1 ExposureMode 曝光模式
exif 27 A403 3 1 WhiteBalance 白平衡设置
exif 28 A406 3 1 SceneCaptureType 图像类型?
ifd =
offset=
entries=
tiff 1 201 4 1 JpegIFOffset JPEG缩略图偏置量
tiff 2 202 4 1 JpegIFByteCount JPEG缩略图数据长度
ifd =
offset=
entries=
tiff 1 100 3 1 RGBImageWidth RGB缩略图宽度
tiff 2 101 3 1 RGBImageLength RGB缩略图高度
tiff 3 102 3 3 RGBBitsPerSample 每通道位数
tiff 4 103 3 1 Compression 压缩(无效?)
tiff 5 106 3 1 PhotometricInterpretation 色彩空间
tiff 6 111 4 1 RGBStripOffsets RGB缩略图偏置值
tiff 7 115 3 1 RGBSamplesPerPixel 每像素通道数
tiff 8 116 3 1 RGBRowsPerStrip 数据块中的行数
tiff 9 117 4 1 RGBStripByteConunts RGB缩略图数据长度
tiff 10 11C 3 1 PlanarConfiguration 如果是YCRCB,排列方式
tiff 11 C5D9 4 1
ifd =
offset=
entries=
tiff 1 103 3 1 Compression 压缩(无效?)
tiff 2 111 4 1 StripOffsets RAW图偏置值
tiff 3 117 4 1 StripByteConunts RAW图数据长度
tiff 4 C5D8 4 1
tiff 5 C5E0 4 1

makernotes的部分内容是整型数组,按照在数组中的位置解析:

名称 数组中的位置 含义
CameraSettings1 1 Length in bytes
2 Macro mode
3 Self-timer in 1/10 second
4 Quality
5 Flash Mode
6 Continuous drive mode
7
8 Focus Mode
9
10
11 Image Size
12 Easy shooting Mode
13 Digital Zoom
14 Contrast
15 Saturation
16 Sharpness
17 ISO Speed
18 Metering Mode
19 Focus Type
20 Auto Focus Point Selected
21 Exposure Mode
22
23 LensType
24 long focal length of lens
25 short focal length of lens
26 focal units per mm
27
28
29 Flash Activity
30 Flash details
31
32
33 FocusContinuous
34
35
36
37 ZoomedResolution
38 ZoomedResolutionBase
39
40
41
42
43 ColorTone
44
45
46
Custom Functions 1 Length in Byte
2 SetFunctionWhenShooting
3 LongExposureNoiseReduction
4 FlashSyncSpeedAv
5 Shutter-AELock
6 AFAssistBeam
7 ExposureLevelIncrements
8 FlashFiring
9 ISOExpansion
10 AEBSequence
11 SuperimposedDisplay
12 MenuButtonDisplayPosition
13 MirrorLockup
14 AFPointSelectionMethod
15 ETTLII
16 ShutterCurtainSync
17 SafetyShiftInAVorTV
18 LensAFStopButton
19 AddOriginalDecisionData
CanonFocalLength 2 FocalLength
3 FocalPlaneXSize in 1/1000 inch
4 FocalPlaneYSize in 1/1000 inch
CanonPictureInfo 3 CanonImageWidth
4 CanonImageHeight
5 CanonImageWidthAsShot
6 CanonImageHeightAsShot
23 AFPointsUsed
CanonFileInfo 1 Length in Byte
2 Directory
3 filenumber
CanonColorInfo 1 Length in Byte
10 ColorTemperature
CameraSettings2 1 Length in Byte
2
3 ISO
4
5 TargetAperture
6 TargetExposureTime
7 ExposureCompensation
8 WhiteBalance
9
10 SequenceNumber
11
12
13
14
15
16 FlashExposureComp
17 AutoExposureBracketing
18 AEBBracketValue
19
20 FocusDistanceUpper
21 FocusDistanceLower
22 FNumber
23 ExposureTime
24
25 Bulb Duration in 1/10 second
26
27
28 AutoRotate
29
30 Self-timer2
31
32
33
34

因为CR2是私有格式,有些tag的含义还没有搞清楚。

有趣的是在CR2中除了主图数据外,还含有3个缩略图,其中一个是大幅的JPEG图,另外2个是小幅的JPEG和位图。通过读取IFD可以找到它们在文件中的位置和数据长度,直接将对应的数据块保存下来就是标准的图像文件。

从RAW图像偏置值出发可以解码原始图像数据

2005-4-10更新