回 帖 发 新 帖 刷新版面

主题:查看数码相机jpg照片信息的VB代码

查看数码相机jpg照片信息的VB代码

如今数码相机和手机拍照已经普及,这种数码相机拍出来的jpg图片文件与普通的jpg图片文件相比较,多了“数码相机识别信息”,这些信息包括拍摄时的光圈、快门、白平衡、ISO、焦距、日期时间以及相机品牌、型号、色彩编码等各种数据。各位一定想在自己编写的程序中查看这些信息,没问题!下面就是可以查看这些信息的代码,由于信息比较多,我只选取了其中的一部分,你可以自行增、删,当然前提是你必须对TIFF文件的数据结构比较熟悉(因为这些信息采用的是TIFF格式)。如果不熟悉,请先参看笔者的《TIF文件数据结构》和《jpg文件数据结构》。
在窗体上添加一个按纽和一个文本框,文本框设置为有垂直滚动条和可以接受多行文本,代码如下:

Option Explicit

Private Type GdiplusStartupInput
GdiplusVersion           As Long
DebugEventCallback       As Long
SuppressBackgroundThread As Long
SuppressExternalCodecs   As Long
End Type

Private Type PropertyItem           '标签结构
propId                   As Long  '标签ID
Length                   As Long  '标签值长度字节
Type                     As Long  '标签类型
Value                    As Long  '标签值
End Type

Private Declare Function GdiplusStartup Lib "gdiplus" (Token As Long, inputbuf As GdiplusStartupInput, Optional ByVal outputbuf As Long = 0) As Long
Private Declare Function GdipLoadImageFromFile Lib "gdiplus" (ByVal FileName As Long, hImage As Long) As Long
Private Declare Function GdipDisposeImage Lib "gdiplus" (ByVal Image As Long) As Long
Private Declare Function GdipGetPropertyCount Lib "gdiplus" (ByVal Image As Long, numOfProperty As Long) As Long
Private Declare Function GdipGetPropertyIdList Lib "gdiplus" (ByVal Image As Long, ByVal numOfProperty As Long, list As Long) As Long
Private Declare Function GdipGetPropertyItemSize Lib "gdiplus" (ByVal Image As Long, ByVal propId As Long, Size As Long) As Long
Private Declare Function GdipGetPropertyItem Lib "gdiplus" (ByVal Image As Long, ByVal propId As Long, ByVal propSize As Long, Buffer As Long) As Long
Private Declare Sub GdiplusShutdown Lib "gdiplus" (ByVal Token As Long)
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDst As Any, lpSrc As Any, ByVal ByteLength As Long)

Dim ImagePath As String

Private Sub Form_Load()
ImagePath = "(全路径文件名)"
End Sub

Private Sub Command1_Click()
Dim Bitmap        As Long    '图像句柄
Dim Token         As Long    'Gdip启动标记
Dim Index         As Long    '标签索引
Dim PropertyCount As Long    '标签数量
Dim ItemSize      As Long    '标签值大小
Dim TagName       As String  '标签名
Dim TagID         As String * 4 '标签ID
Dim Prop          As PropertyItem
Dim GdipInput     As GdiplusStartupInput
Dim d5 As String, st2 As String, st3 As String, st4 As String, st5 As String
Dim d_1 As Long, d_2 As Long
Dim k As Integer, z As String

GdipInput.GdiplusVersion = 1
GdiplusStartup Token, GdipInput                 '启动Gdip
GdipLoadImageFromFile StrPtr(ImagePath), Bitmap '装入图像,获取图像句柄
GdipGetPropertyCount Bitmap, PropertyCount      '获取标签数量

If PropertyCount Then
ReDim PropertyList(PropertyCount - 1) As Long
GdipGetPropertyIdList Bitmap, PropertyCount, PropertyList(0)    '获取所有标签的ID(TagID)

For Index = 0 To PropertyCount - 1
GdipGetPropertyItemSize Bitmap, PropertyList(Index), ItemSize '获取标签大小
ReDim Buffer(ItemSize - 1) As Byte                            '根据标签大小建立缓冲区
GdipGetPropertyItem Bitmap, PropertyList(Index), ItemSize, ByVal VarPtr(Buffer(0)) '根据标签大小获取其内容
CopyMemory Prop, ByVal VarPtr(Buffer(0)), Len(Prop) '把标签内容复制到Prop结构
ReDim Data(ItemSize - 16) As Byte
CopyMemory Data(0), ByVal Prop.Value, ItemSize - 16 '把Prop结构中的标签值复制到Data数组
TagID = Right("000" & Hex(Prop.propId), 4)
Select Case Prop.Type
Case 2, 7 '值类型是文本
TagName = ""
Select Case TagID
Case "0131": TagName = "图像生成软件..:"
Case "0132": TagName = "图像生成时间..:"
Case "5041": TagName = "Interop 索引..:"
Case "5042": TagName = "Interop 版本..:"
Case "010E": TagName = "图像描述......:"
Case "010F": TagName = "相机制造厂商..:"
Case "0110": TagName = "数码相机型号..:"
Case "9000": TagName = "Exif 版本.....:"
Case "9003": TagName = "照片拍摄时间..:"
Case "9004": TagName = "数字化时间....:"
Case "9101": TagName = "像素顺序......:": GoSub 200
Case "A000": TagName = "FlashPix 版本.:"
Case "A300": TagName = "图像来源......:": GoSub 200
Case "A301": TagName = "场景类型......:": GoSub 200
Case "C4A5": TagName = "打印命令集版本:"
End Select
If Len(TagName) Then
z = StrConv(Data, vbUnicode): k = InStr(z, Chr(0))
If k Then z = Left(z, k - 1)
st2 = st2 & TagName & Replace(z, Chr(0), "") & vbCrLf
End If
Case 3     '值类型是整形
TagName = ""
Select Case TagID
Case "0103": TagName = "数据压缩方式..:": z = IIf(Data(0) = 0, "未压缩", "JPEG压缩")
Case "0112": TagName = "相机对场景方向:": z = Choose(Data(0) + 1, "未知", "顶部左侧", "顶部右侧", "底部右侧", "底部左侧", "左侧顶部", "右侧顶部", "右侧底部", "左侧底部")
Case "0128": TagName = "分辨率单位....:": z = Choose(Data(0) + 1, "未知", "无单位", "英吋", "厘米")
Case "0213": TagName = "颜色抽样方式..:": z = IIf(Data(0) = 1, "像素阵列中心", "基准点")
Case "8822": TagName = "曝光模式......:": z = Choose(Data(0) + 1, "未知", "手动曝光", "正常曝光", "光圈优先", "快门优先", "慢速", "高速", "肖像", "风景")
Case "8827": TagName = "ISO 感光度....:": z = Data(0)
Case "9207": TagName = "测光方式......:": z = Choose(Data(0) + 1, "未知", "平均测光", "中央重点测光", "点测光", "多点测光", "多区域测光", "部分测光", "其它")
Case "9208": TagName = "白平衡........:": z = Choose(Data(0) + 1, "未知", "日光", "荧光灯", "白炽灯", "其它")
Case "9209": TagName = "闪光灯应用....:": z = IIf(Data(0) = 1, "闪光", "未闪光")
Case "A001": TagName = "色彩空间......:": z = IIf(Data(0) = 1, "sRGB", "其它")
Case "A210": TagName = "密度单位......:": z = Choose(Data(0) + 1, "未知", "无单位", "英吋", "厘米")
End Select
If Len(TagName) Then st3 = st3 & TagName & z & vbCrLf
Case 4     '值类型是长整形
TagName = ""
Select Case TagID
Case "A002": TagName = "源图像宽(像素):"
Case "A003": TagName = "源图像高(像素):"
Case "9206": TagName = "到焦点距离(米):"
End Select
If Len(TagName) Then d_1 = Data(0) + Data(1) * 256: st4 = st4 & TagName & d_1 & vbCrLf
Case 5, 10 '值类型是分数
TagName = ""
Select Case TagID
Case "011A": TagName = "横分辨率(像素):": GoSub 500: z = d5
Case "011B": TagName = "纵分辨率(像素):": GoSub 500: z = d5
Case "829A": TagName = "曝光时间(秒)..:": GoSub 500: z = "1/" & d_2
Case "9201": TagName = "快门速度(秒)..:": GoSub 500: z = "1/" & Format(d5, "#")
Case "9202": TagName = "相机光圈(F值).:": GoSub 500: z = "F" & Format(d5, "0.0")
Case "9203": TagName = "曝光量........:": GoSub 500: z = "1/" & Format(d5, "0.0")
Case "9204": TagName = "曝光补偿(EV)..:": GoSub 500: z = Format(d5, "0.00")
Case "9205": TagName = "镜头最大光圈值:": GoSub 500: z = "F" & Format(d5, "0.0")
Case "920A": TagName = "物理焦距(毫米):": GoSub 500: z = Format(d5, "0.0")
Case "A215": TagName = "CCD感光度(ISO):": GoSub 500: z = Format(d5, "#")
End Select
If Len(TagName) Then st5 = st5 & TagName & z & vbCrLf
End Select
Next

Text1 = st4 & st2 & st5 & st3
End If

GdipDisposeImage Bitmap
GdiplusShutdown Token
Exit Sub

200
Select Case TagID
Case "9101": If Data(0) = 0 Then z = "无" Else z = IIf(Data(0) = 1 And Data(1) = 2 And Data(2) = 3, "YCbCr", "RGB")
Case "A300": z = IIf(Data(0) = 3, "数字相机", "未知")
Case "A301": z = IIf(Data(0) = 1, "相机直接拍摄", "未知")
End Select
Data = StrConv(z, vbFromUnicode)
Return

500
d_1 = "&H" & Right("0" & Hex(Data(3)), 2) & Right("0" & Hex(Data(2)), 2) & Right("0" & Hex(Data(1)), 2) & Right("0" & Hex(Data(0)), 2)
d_2 = "&H" & Right("0" & Hex(Data(7)), 2) & Right("0" & Hex(Data(6)), 2) & Right("0" & Hex(Data(5)), 2) & Right("0" & Hex(Data(4)), 2)
If d_2 Then d5 = d_1 / d_2 * IIf(Prop.Type = 5, 1, 10)
If TagID = "829A" Then If d5 Then d_2 = 10000 / (10000 * Round(d5, 4))
Return

End Sub

回复列表 (共6个回复)

沙发

TIF文件数据结构之研究

    TIF文件格式最早是为了存储扫描仪图像而设计的。它的最大的特点就是与计算机的结构、操作系统以及图形硬件系统无关。它可处理黑白、灰度、彩色图像。在存储真彩色图像时和BMP格式一样,直接存储RGB三原色的浓度值而不使用彩色映射(调色板)。对于介质之间的交换,TIF称得上是位图格式的最佳选择之一。
    TIF的全面性也产生了不少问题,它的包罗万象造成结构较为复杂,变体很多,兼容性较差,它需要大量的编程工作来全面译码。例如,TIF图像数据可以用几种不同的方法压缩,用一个程序来读出所有的TIF几乎是不可能的。
    TIF文件一般由三个部分组成:文件头(简称IFH)、图像文件目录(简称IFD)、图像数据。

一、图像文件头(Image  File  Header)
    IFH数据结构包含3个成员共计8个字节(见表一):

表一  IFH结构描述
---------------------------------------------------------------
名称               字节数  数据类型   说明
---------------------------------------------------------------
Byteorder            2     Integer   TIF标记,其值为4D4D或4949
Version              2     Integer   版本号,其值恒为2A00
Offset to first IFD  4     Long      第一个IFD的偏移量
---------------------------------------------------------------
说明
    ①Byteorder:可能是4D4D或4949,4D4D表示该图使用Motorola字节序(摩托罗拉整数格式,高位在前),4949表示该图使用Intel字节序(英特尔整数格式,低位在前)。
    ②Version:总是2A00,它可能是tif文件的版本,也可能用于进一步校验该文件是否为TIF格式。
    ③Offset  to  first  IFD:第一个IFD(因为可能会有多个顺序排列的IFD)相对于文件开始处的偏移量。IFD并不是紧跟在IFH后面,相反,它位于第三部分图像数据的后面,即TIF图像文件的一般组织形式是:IFH——图像数据——IFD。笔者推测,把IFD放在图像数据后面,是为了方便用户添加自定义的标记属性,否则,如果IFD位于图像数据前面,那么用户在添加自定义的标记属性之前,就必须将图像数据整体后移若干字节,还要修改图像数据的偏移量,很麻烦的。


二、图像文件目录(Image  File  Directory)
    IFD是TIF图像文件中重要的数据结构,它包含了三个成员。由于一个TIF文件中可以有多个图像,而一个IFD只标识一个图像的所有属性(也称“标签”),所以,一个TIF文件中有几个图像,就会有几个IFD(Exif子IFD除外)。IFD的结构见表二:

表二  IFD结构描述
--------------------------------------------------------------------
名称                字节数  数据类型  说明
--------------------------------------------------------------------
Directory Entry Count  2    Integer   本IFD中DE的数量
Directory Entry(1)    12              简称DE,中文译义“目录项”
Directory Entry(2)    12
……
Directory Entry(N)    12
Offset to next IFD     4    Long      下一个IFD的偏移量
数据域
--------------------------------------------------------------------
说明
    ①Directory  Entry:共12个字节,结构见表三。需要指出的是,DE的个数是不定的,因为每个DE只标识了图像的一个属性,那么这幅图像有N个属性就会有N个DE,用户甚至可添加自定义的标记属性,这就是为什么称TIF格式文件为“可扩充标记的文件”的原因。
    ②Offset  to  next  IFD  Or  NULL:下一个IFD相对于文件开始处的位置,这是一个链式架构。如果该数字为0,表示已经是最后一个IFD。当然,如果该TIF文件只包含了一幅图像,那么就只有一个IFD,显然这个偏移量也会等于0。
    ③数据域存放DE的长度超过4字节的属性值,如分数类型值或>4字节的文本。

表三  DE结构描述
--------------------------------------------------
名称       字节数 数据类型    说明
--------------------------------------------------
tagID        2    Integer    本属性的标签编号
type         2    Integer    本属性值的数据类型
length       4    Long       该类型数据的数量
valueOffset  4    Long       属性值的存放偏移量
--------------------------------------------------
说明
    由DE标识的图像属性有:图像的大小、分辨率、是否压缩、像素的行列数、颜色深度(单色、16色、256色、真彩色)等等。其中:
    ①tagID:是该属性的标签编号,在图像文件目录中,它是按照升序排列的(但不一定是连续的)。这些编号在TIF格式官方白皮书中可以查到相应的含义,但遗憾的是,我们到哪儿可以找到中文的官方白皮书呢?所以,笔者只能把网上能找得到的资料(再结合自己的实验结果)罗列出来,见表五。
    ②type:表示该属性值的数据类型,有的文章认为有5种数据类型,有的说是12种数据类型。笔者将12种数据类型都列出来,见表四。
    ③length:该种类型的数据的个数,而不是某个数据的长度,但对于文本来说,字符个数就是文本长度。  
    ④valueOffset:是tagID代表的变量值相对文件开始处的偏移量,但如果变量值占用的空间不多于4个字节(例如只有1个Integer类型的值),那么该值就直接存放在valueOffset中,没必要再另外指向一个地方了。

板凳

表四  DE中的数据类型
--------------------------------------------------------------------------
type值 数据类型   说明

--------------------------------------------------------------------------
0001   Byte       字节型
0002   Ascii      文本型,7位Ascii码加1位二进制0
0003   Integer    整型
0004   Long       长整型
0005   RATIONAL   分数型,由两个Long组成,第1个是分子,第2个是分母
0006   SBYTE      有符号字节型
0007   UNDEFINED  有符号文本型,8位Ascii码
0008   SSHORT     有符号整型
0009   SLONG      有符号长整型
000A   SRATIONAL  有符号分数型,由两个SLONG组成,第1个是分子,第2个是分母
000B   Single     浮点单精度,4字节IEEE格式
000C   Double     浮点双精度,8字节IEEE格式
--------------------------------------------------------------------------
说明
    ①如果是英特尔字节序,在实图中type值的两字节要反过来,例如Btye为0100。


表五  DE中标签编号的含义
----------------------------------------------------------------------------

TagID  标签名称             type     说明
----------------------------------------------------------------------------
00FE  新的子文件            0004
00FF  子文件类型            0003
0100  图像宽                0004  单位:像素
0101  图像高                0004  单位:像素
0102  颜色深度              0003  1=单色,4=16色,8=256色。如数据个数>2为真彩
0103  图像数据压缩方式      0003  1=未压缩,2=采用CCITT Group 31 压缩,
      3=采用CITT Group 3 Fax T4 压缩,4=采用CITT Group 3 Fax T6 压缩
      5=LZW压缩,6=JPEG压缩,32773=PackBits压缩
0104  可交换信息
0106  图像色彩空间          0003  1=单色,2=RGB,3=为YCbCr
010E  图像描述              0002  双字节的字符码不能使用,  如:中文/韩文/日文
010F  数字相机制造商        0002  此标签在Exif标准中可选,在DCF中必需
0110  数字相机型号          0002  同上
0111  图像扫描线偏移量      0004  图像数据起始字节相对于文件开始处的位置
0112  相机相对于场景的方向  0003  其值的含义见表五-1
0115  每像素中的组件个数    0003  在未经压缩的彩色图像中=3
0116  图像扫描线的数量      0004  表示图像有几行扫描线,实际上等于图像高度
0117  图像数据字节总数      0003  如果不是偶数,那么实际存放时会在后面加0
011A  水平分辨率            0005  缺省值是  1/72英寸
011B  垂直分辨率            0005  同上
011C  YCbCr的字节对齐顺序   0003  1=每个子采样像素都是连续的,2=被分割
0128  分辨率计量单位        0003  1=无单位,2=英寸(缺省值),3=厘米
012D  传输函数              0003
0131  图像的生成软件        0002  数字相机的内部控制软件
0132  图像的生成时间        0002  格式:YYYY:MM:DD  HH:MM:SS
013B  图像作者              0002
013D  预测程序              0003  
013E  图像白平衡点          0005  图像白点的色度
013F  图像的原始色度        0005  图像原色的色度
0140  调色板偏移量          0003  256色和16色图像才有此属性,而且有连续2个调色板,
       但属性的length值只表示出1个调色板
0142  平面宽                0003  
0143  平面长                0003
0144  平面偏移量            0004
0145  平面字节数            0003
014A  IFD  子程式           0004        
015B  未定义的JPEG项目

3 楼

0200  拍摄模式              0003  有3个值:①0=正常, 1=未知, 2=快速, 3=全景。②序列号。
       ③全景方向:1=从左到右, 2=从右到左, 3=从下到上, 4=从上到下
0201  缩略图的偏移量        0004
0202  缩略图大小            0004
0207  软件版本              0002  相机内部的固件版本
0208  PictInfo              0002
0209  相机ID                0004  用户可以使用客户端工具来改变它的内容
0211  转换常量              0005  JPEG格式转为RGB格式的常量(0.299/0.587/0.114)
0212  被采样的色度数据个数  0005  第一个值表示水平采样率,下一个值表示垂直采样率
0213  色度抽样方法          0003  1=像素阵列的中心,2=基准点
0214  黑白参照值对          0005  黑点/白点的比值
0F00  数据转储              0004
1000  品质                  0002  "BASIC"、"NORMAL"、"FINE"
1001  清晰度                0003  1、2=温和,3=标准,4、5=锐利
1002  白平衡                0003  0000=自动,0100=白昼,0200=阴天,0300=明亮,0301=纯白
       0302=萤光,0400=炽热,0F00=自定义
1003  颜色                  0003  0000=标准(STD),  0100=高,0200=低(ORG)
1004  色调                  0003  0000=标准(STD),0100=高(HARD),0200=低(ORG)
1010  闪光模式              0003  0=自动,1=打开,2=关闭,3=防红眼
1011  闪光强度              000A  单位:APEX
1020  宏                    0003  0O=ff,1=On
1021  聚集模式              0003  0=自动,1=手动
1030  慢快门                0003  0=关,1=开
1031  图像模式              0003  0000=自动,0001=人像,0002=风景,0004=运动,0005=夜景
       0006=程式特效,0100=缝隙特效,0200=百页窗特效,0300=手控
1032  未知                  0003
1100  连拍                  0003  0=关,1=开
1200  未知                  0003
1300  模糊预警              0003  0=关,1=开.
1301  聚集预警              0003  0=自动,1=关闭
1302  特效预警              0003  0=自动,1=关闭
1C01  IPTC NAA
1C02  IPTC RMF
828D  CFA 反复模式          0003
828E  CFA 模式              0001
828F  电池标准              0005
8298  版权信息              0005
829A  曝光时间              0005  快门速度的倒数,单位:秒
829D  光圈系数              0005  光圈的F值
83BB  IPTC/NA 基本资料      0004
8769  Exif子IFD的偏移量     0004
8773  Inter 颜色基本资料
8822  曝光模式              0003  1=手动曝光,2=正常曝光,3=光圈优先,4=快门优先
       5=慢速,6=高速,7=肖像模式,8=风景模式
8824  感光度                0002
8825  GPS 信息              0004
8827  ISO 感光度            0003  等效于  Ag-Hr  胶片的速率
8828  OEC 趣味定义        
8829  交互                  0003
882A  区域时间补偿          0003
882B  自动时间模式          0003
9000  Exif版本              0002  4个ASCII字符,如图片基于Exif  V2.1则值是0210
9003  拍摄时间              0002  精确到秒
9004  数字化时间            0002  照片数字化时间,精确到秒
9101  像素顺序              0007  0=不存在,123=YCbCr,456=RedGreenBlue
9102  JPEG的平均压缩率      0005  粗略的估计

4 楼

9201  快门速度              0005  单位:APEX,要经过计算才能转换成正常的快门速度
9202  光圈                  0005  单位:APEX,要经过计算才能转换成正常的光圈
9203  曝光量                0005  单位:APEX,要经过计算才能转换成正常的曝光量
9204  曝光补偿              0005  单位:APEX
9205  镜头的最大光圈值      0005  单位:APEX,与9202的处理过程一样
9206  到焦点的距离          0004  单位:米
9207  曝光的测光方法        0003  0=未知,1=平均测光,2=中央重点测光,3=点测光,
       4=多点测光,5=多区域测光,6=部分测光,255=其他
9208  白平衡设置            0003  0=未知,1=日光,2=荧光灯,3=白炽灯,10=闪光灯,
       17=标准光A,18=标准光B,19=标准光C,20=D55, 21=D65,22=D75,255=其他
9209  闪光状况              0003  0=未闪光,1=闪光,5=闪光但未检测反射光,7=闪光且检测了反射光
920A  镜头的物理焦距        0005  单位:毫米
920B  闪光源                0005
920C  间隙频率响应
920D  噪音
9211  图像数                0004
9212  保护分类              0002
9213  图像历史              0002
9214  主题区域              0003
9215  曝光量索引            0005
9216  TIFF/EP  标准ID       0001
927C  厂商注释              0007  这是IFD格式的数据
9286  用户注释              0002  允许使用两字节  unicode  字符
9290  细微拍摄时间          0002  单位:微秒。与9003合并为:年:月:日  时:分:秒.微秒
9291  细微拍摄时间(原始)  0002  同上  
9292  细微拍摄时间(数字化)0002  同上
A000  FlashPix版本          0002  若图像基于FlashPix  formar  Ver.1.0,则值为0100
A001  色彩空间              0003  1=sRGB色彩,65535=其他色彩空间
A002  主图像宽              0004  单位:像素
A003  主图像高              0004  同上
A004  音频文件的名称        0002  如果数字相机能够纪录图像的音频数据的话
A005  扩展ExifR98           0004  该值经常是IFD格式的数据
A20B  闪光量                0005
A20C  间隙频率响应          0003
A20E  CCD像素密度(X)      0005
A20F  CCD像素密度(Y)      0005
A210  密度单位              0003  1=无单位,2=英寸,3=厘米
A214  主题区域              0003
A215  CCD 感光度            0005  只有Kodak的数字相机使用这个标签来替代8827
A217  CCD 单元类型          0003  2=芯片颜色区域传感器
A300  图像来源              0007  3=图像源是数字定格相机
A301  场景类型              0001  1=图像是通过相机直接拍摄出来的
A302  CFA  几何模式         0001  色彩过滤阵列
A401  未知                  0003
A402  未知                  0003
A403  未知                  0003
A404  未知                  0005
A406  未知                  0003
A408  未知                  0003
A409  未知                  0003
A40A  未知                  0003
A432  未知                  0005
A433  镜头生产商
A434  镜头型号
C4A5  打印命令集版本        0002

5 楼

  (以下TagID是某数码相机所摄的JPG图片中APP1段的Interoperability  IFD使用的)
0001  通信索引              0002  R98=主图像IFD,THM=缩略图IFD
0002  版本                  0003  例:0100表示版本Interoperability  1.00
1000  图像文件格式          0002  例:Exif JPEG Ver.2.1
1001  图像宽                0004
1002  图像高                0004

  (以下TagID是某数码相机所摄的JPG图片中APP1段使用的)
0001  未知                 未定义  总是=0100,可能为版本号
0002  ISO设置               0003  0100=ISO100,0200=ISO200,0400=ISO400
0003  颜色模式              0002  “COLOR”、“B&W”
0004  品质                  0002  “NORMAL”、“FINE”、“BASIC”
0005  白平衡                0002  “AUTO”、“WHITE  PRESET”等
0006  图像清晰度            0002  “AUTO”、“HIGH”等
0007  调焦模式              0002  “AF-S”=单一,  “AF-C”=持续
0008  动画设置              0002  “NORMAL”、“RED-EYE”等
000A  未知                  0005  
000F  ISO选项               0002  “MANUAL”=用户选择,“AUTO”=机器选择
0010  数据转储              未知
0080  图像调整              0002  “AUTO”、“NORMAL”、“CONTRAST(+)”等
0082  适配器                0002  “OFF”、“FISHEYE  2”、“WIDE  ADAPTER”等
0085  手动对焦距离          0005  单位:米
0086  数字变焦              0005  100/100=仅光学变焦,140/100=1.4x  数字变焦
0088  AF焦点位置            0002  0100=上,0200=下,0300=左,0400=右
0010  未知                  0003
0011  未知                  0004
0012  未知                  0003
0013  未知                  0003
0014  CCD  灵敏度           0003  64=标准,125=+1.0,250=+2.0,244=+3.0
001D  拍摄日期              0002  只有年、月、日
----------------------------------------------------------------------------
说明
    ①如果是英特尔字节序,TagID和type的两字节要反过来,例如图像宽为0001。
    ②type=5的分数型属性,其值要占用8个字节,所以在valueOffset中存放的肯定是值的偏移量,而不是值本身。type=2的文本型属性,如果字符个数大于4字节,在valueOffset中存放的也是值的偏移量,而不是值本身。
    ③“图像数据字节总数”一般是偶数,如果是奇数,那么实际存放时会在后面加一个0,但这个0不会计算在字节总数之内。
    ④对于数码相机的JPG图片中的APP1段来说,表四中的图像均是指缩略图。
    ⑤有关JPG图片的问题,详见笔者的《JPEG文件数据结构》一文。
    ⑥由于数码相机厂商各行其事,所以TagID失去了统一的规范,两台相机所拍摄的照片,其TagID的编号与意义可能完全不同,这一点务请注意。


表五-1  相机方向值含义
--------------------
值        含义
--------------------
1        顶部左侧
2        顶部右侧
3        底部右侧
4        底部左侧
5        左侧顶部
6        右侧顶部
7        右侧底部
8        左侧底部
--------------------


三、图像数据
    又称扫描线数据。这些数据可能是压缩的,也可能是未压缩的。如果经过压缩,那么压缩算法又有许多种,所以,图像数据是TIF文件中最为复杂的部分,暂还没有哪个软件能译出所有的压缩算法。

6 楼

顶大神

我来回复

您尚未登录,请登录后再回复。点此登录或注册