JPEG图像EXIF数据信息的解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: JPEG图像EXIF数据信息的解析

刚刚结束本科生活的我,那会还比较颓废,但是因为读研,导致宝宝七月初就到了学校,来了以后也不知道该做什么,就出去浪呀~哈哈,不料来了不久后接到老师的任务,让宝宝把JPEG图像的EXIF信息解读出来,当时内心OS大抵是:什么?老师说了什么?当时对于EXIF完全陌生,没有一点概念,宝宝在百度之后,也是比较蒙圈的,不过还是拖拖拉拉的去整理了一下,能百度到的相关资料比较有限,但还是参考了好多大神的博文,灰常有用,但是有些解读数据的部分介绍的很简单,对于初次尝试解读信息的我们来说摸不着头脑,布吉岛怎么出来的,我自己尝试过后,大体都解读出来了,有些问题还没有完全弄明白是为什么(加了底纹颜色,请多指教),只是摸到了规律,but还是先贴出来遛遛。。。。。。

恩~EXIF信息到底是什么就不介绍了,既然要做这个自然是已经百度过了,有相关概念的,而如何查看JPEG图像的EXIF信息,这个嘛,我自己是下载了一个WinHEX,很方便哦。顺便安利一个MagicEXIF编辑器,可以清楚地看到你的JPEG图像所包含的所有信息。既然能查看EXIF信息了,那如何将一串串的HEX形式的信息和了解到的文字性质的属性对应起来呢?下面我们就开始解读咯~

FF D8:SOI(Start of image)标记

FF E1:APP1标记

 

APP1数据

35 89:APP1数据大小

45786966 0000:Exif头

49492A00 08000000:TIFF 头,4949表示按照 "Intel" 的字节序(Little Endian) 来排列数据,2A00表示两个字节长度,08000000表示到第一个IFD的偏移量为8

0E 00:目录项的号码=14

 

项目0

 

0E 01:代表标签号,对应的标签名为   ImageDescription

02 00:数据值为2,代表数据格式为ascii strings

1B 00 00 00:组件的数目=27(27个字节)

F4 03 00 00:数据的偏移量  (地址03F4)

 

红框开始的位置为起始地址,偏移12个字节,黄框之内的内容为数据内容,共27个字节(00表示空格)。相关验证如下图:

 

 

项目1

 

0F 01:代表标签号,对应的标签名为 Make

02 00:数据值为2,代表数据格式为ascii string

1E 00 00 00:组件的数目=30(30个字节)

0F 04 00 00:数据的偏移量(地址040F)

 

红框位置为起始地址,偏移12个字节,黄框之内的为数据内容(30个字节,‘00’代表空格),验证如下图:

 

 

项目2

 

10 01:代表标签号,对应的标签名为 Model

02 00:数据值为2,代表数据格式为 ascii string

1E 00 00 00:组件的数目=30(30个字节)

2D 04 00 00:数据的偏移量(地址042D)

 

红框位置为起始位置,偏移12字节,黄框之内为数据内容(30个字节,‘00’表示空格),验证如下图:

 

 

项目3

 

12 01:代表标签号,对应的标签名为  Orientation

03 00:数据值为3,代表数据格式为 unsigned short

01 00 00 00:组件的数目=1(2个字节)

01 00 00 00:数据值=1 ,见下图(value=1,上/左)

 

 

 

 

 

项目4

 

1A 01:代表标签号,对应的标签名为XResolution

05 00:数据值为5,代表数据格式为 unsigned rational

01 00 00 00:组件的数目=1(8个字节)

4B 04 00 00:数据的偏移量(地址044B)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(8个字节),十六进制(48 00 00 00)=十进制(72),十六进制(01 00 00 00)=十进制(1),XResolution=72/1。

 

 

 

 

项目5

 

1B 01:代表标签号,对应的标签名为YResolution

05 00:数据值为5,代表数据格式为 unsigned rational

01 00 00 00:组件的数目=1(8个字节)

53 04 00 00:数据的偏移量(地址0453)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(8个字节),十六进制(48 00 00 00)=十进制(72),十六进制(01 00 00 00)=十进制(1),XResolution=72/1。

 

 

 

项目6

 

28 01:代表标签号,对应的标签名为ResolutionUnit

03 00:数据值为3,代表数据格式为 unsigned short

01 00 00 00:组件数目=1(2个字节)

02 00 00 00:数据值=2(英寸),见下图。

 

 

 

项目7

 

31 01:代表标签号,对应的标签名为Software

02 00:数据值为2,代表数据格式为ascii string

18 00 00 00:组件的数目=24(24个字节)

5B 04 00 00:数据的偏移量(地址04 5B)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(24个字节),验证如下图:

 

 

 

 

项目8

 

32 01:代表标签号,对应的标签名为DateTime

02 00:数据值为2,代表数据格式为 ascii string

14 00 00 00:组件数目=20(20个字节)

73 04 00 00:数据的偏移量(地址0473)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(20个字节),验证如下图:

 

项目9

 

13 02:代表标签号,对应的标签名为YCbCrPositioning

03 00:数据值为3,代表数据格式为 unsigned rational

01 00 00 00:组件数目=1(2个字节)

01 00 00 00:数据值=1,见下图,‘1’表示像素阵列的中心

 

 

 

项目10

 

69 87:代表标签号,对应的标签名为ExifOffset

04 00:数据值为4,代表数据格式为 unsigned long

01 00 00 00:组件数目=1(4个字节)

B6 00 00 00:数据值=182,Exif子IFD的偏移量

 


项目11

 

25 88:代表标签号,对应的标签名为GPSInfo   (Misc Tags)

04 00:数据值为4,代表数据格式为 unsigned long

01 00 00 00:组件数目=1(4个字节)

AE 02 00 00:数据值=686(GPS目录偏移量)

 

 

项目12

 

9C 9C:代表标签号,对应的标签名为 备注

01 00:数据值为1,代表数据格式为 unsigned byte

00 01 00 00:组件数目=256(256个字节)

87 04 00 00:数据的偏移量(地址0487)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(256个字节),验证如下图:

 


项目13

 

9E 9C:代表标签号,对应的标签名为  关键词

01 00:数据值为1,代表数据格式为 unsigned byte

00 01 00 00:组件数目=256(256个字节)

87 05 00 00:数据的偏移量(地址0587)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(256个字节),验证如下图:

 


拍摄参数(子IFD)

08 03 00 00:

27 00:十六进制(27)=十进制(39),目录号的数目=39

 

项目0

 

9A 82:代表标签号,对应的标签名为Exposure Time

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

87 06 00 00:数据偏移量(地址0687),有理数翻转?如下图所示:

 

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(000007D0)=2000,后四位作为分母,H(000F4240)=1000000,最终结果:2000/1000000=1/500(缺省单位)。

 

项目1

 

9D 82:代表标签号,对应的标签名为FNumber

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件的数目=1(8个字节)

8F 06 00 00:数据的偏移量(地址068F)

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(00000230)=560,后四位作为分母,H(00000064)=100,最终结果=560/100=5.6

项目2

 

22 88:代表标签号,对应的标签名为ExposureProgram

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件的数目=1(2个字节)

02 00 00 00:数据值=2,‘2’表示正常程序曝光

 


项目3

 

27 88:代表标签号,对应的标签名为ISOSpeedRatings

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件的数目=1(2个字节)

64 00 00 00:数据值=100,十六进制(64)=十进制(100)

 


项目4

 

00 90:代表标签号,对应的标签名为ExifVersion

07 00:数据值为7,代表数据格式为undefined

04 00 00 00:组件数目=4(4个字节)

30 32 33 30:数据值=0230,表明Exif版本是2.3的,相关解释如下图:


项目5

 

03 09:代表标签号,对应的标签名为DateTimeOriginal

02 00:数据值为2,代表数据格式为ascii strings

14 00 00 00:组件数目=20(20个字节)

97 06 00 00:数据的偏移量(地址0697)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(20个字节),验证如下图:

 

项目6

 

04 90:代表标签号,对应的标签名为DateTimeDigitized

02 00:数据值为2,代表数据格式为ascii strings

14 00 00 00:组件数目=20(20个字节)

AB 06 00 00:数据的偏移量(地址06AB)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(20个字节),验证如下图:

 

项目7

 

01 91:代表标签号,对应的标签名为ComponentsConfiguration

07 00:数据值为7,代表数据格式为undefined

04 00 00 00:组件数目=4(4个字节)

00 03 02 01:数据值,01,02,03,见下图:


项目8

 

02 91:代表标签号,对应的标签名为CompressedBitsPerPixel

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

BF 06 00 00:数据的偏移量(地址06BF)

 

红框位置为起始地址,偏移12字节,黄框内为数据内容(8个字节),验证如下:

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(0083ADE2)=8629730,后四位作为分母,H(00261300)=2495232,最终结果=8329730/2495232=3.458488

 

 

项目9

 

01 92:代表标签号,对应的标签名为ShutterSpeedValue(JPEG (粗略的估计)的平均压缩率)

0A 00:数据值为10,代表数据格式为signed rational

01 00 00 00:组件数目=1(8个字节)

C7 06 00 00:数据的偏移量(地址06C7)

 

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(FFFFDCFB)=4294958331,后四位作为分母,H(FFFFFC18)=4294966296,最终结果为10.8?????    此处结果有疑问

 

项目10

 

02 92:代表标签号,对应的标签名为ApertureValue

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

CF 06 00 00:数据的偏移量(地址06CF)

 

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(000001F1)=497,后四位作为分母,H(00000064)=100,最终结果=497/100=4.97

 

 

项目11

 

04 92:代表标签号,对应的标签名为ExposureBiasValue

0A 00:数据值为10,代表数据格式为signed rational

01 00 00 00:组件数目=1(8个字节)

D7 06 00 00:数据的偏移量(地址06D7)

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(00000000)=0,后四位作为分母,H(00000020)=32,最终结果=0/32=0

项目12

 

05 92:代表标签号,对应的标签名为MaxApertureValue

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

DF 06 00 00:数据的偏移量(地址06DF)

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(00000129)=297,后四位作为分母,H(00000064)=100,最终结果=297/100=2.97

 

项目13

 

06 92:代表标签号,对应的标签名为SubjectDistance

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

E7 06 00 00:数据的偏移量(地址06E7)

 

十六进制(00000000)=十进制(0),十六进制(00000064)=十进制(100)。

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,最终结果=0/100=0。

 

 

项目14

 

07 92:代表标签号,对应的标签名为MeteringMode

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

02 00 00 00:数据值=2,‘2’为中央重点测光

 


项目15

 

08 92:代表标签号,对应的标签名为LightSource

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,‘0’意味着未知。

 

项目16

 

09 92:代表标签号,对应的标签名为Flash

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

20 00 00 00:数据值=32

 

项目17

 

0A 92:代表标签号,对应的标签名为FocalLength

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

EF 06 00 00:数据的偏移量(地址06EF)

 

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,H(00000370)=880,后四位作为分母,H(00000064)=100,最终结果=880/100=8.8

 

 

项目18

 

7C 92:代表标签号,对应的标签名为MakerNote

07 00:数据值为7,代表数据格式为 undefined

00 04 00 00:组件数目=1024(1024个字节)

F7 06 00 00:数据偏移量(地址06F7)

 

项目19

 

00 A0:代表标签号,对应的标签名为FlashPixVersion

07 00:数据值为7,代表数据格式为 undefined

04 00 00 00:组件数目=4(4个字节)

30 30 31 30:数据值=0100,H(30313030)=string(0100), 如果图像数据是基于 FlashPix formar Ver.1.0, 则这个值为 "0100".

 

 

项目20

 

01 A0:代表标签号,对应的标签名为ColorSpace

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

01 00 00 00:数据值=1,‘1’表示图像使用sRGB色彩空间

 

 

项目21

 

02 A0:代表标签号,对应的标签名为ExifImageWidth

04 00:数据值为4,代表数据格式为 unsigned long

01 00 00 00:组件数目=1(4个字节)

60 15 00 00:数据值=5472,十六进制(00001560)=十进制(5472)。

 

 

项目22

 

03 A0:代表标签号,对应的标签名为ExifImageHeight

04 00:数据值为4,代表数据格式为 unsigned long

01 00 00 00:组件数目=1(4个字节)

40 0E 00 00:数据值=3648,十六进制(00000E40)=十进制(3648)。

 

 

项目23

 

05 A0:代表标签号,对应的标签名为ExifInteroperabilityOffset

04 00:数据值为4,代表数据格式为 unsigned long

01 00 00 00:组件数目=1(4个字节)

90 02 00 00:数据值=656,十六进制(00000290)=十进制(656)。

 

项目24

 

15 A2:代表标签号,对应的标签名为ExposureIndex

05 00:数据值为5,代表数据格式为 unsigned rational

01 00 00 00:组件数目=1(8个字节)

F7 0A 00 00:数据偏移量(地址0AF7)

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,最终结果=0

 

 

项目25

 

00 A3:代表标签号,对应的标签名为FileSource

07 00:数据值为7,代表数据格式为 undefined

01 00 00 00:组件数目=1(1个字节)

03 00 00 00:数据值=3,值 '0x03' 表示图像源是数字定格相机。

 

项目26

 

01 A3:代表标签号,对应的标签名为SceneType

07 00:数据值为7,代表数据格式为 undefined

01 00 00 00:组件数目=1(1个字节)

01 00 00 00:数据值=1,值 '0x01' 表示图像是通过相机直接拍摄出来的。

 

项目27

 

01 A4:代表标签号,对应的标签名为CustomRendered

03 00:数据值为3,代表数据格式为 unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像未启用自定义处理。

 

 

项目28

 

02 A4:代表标签号,对应的标签名为ExposureMode

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像曝光模式为:自动曝光

 

项目29

 

03 A4:代表标签号,对应的标签名为WhiteBalance

03 00:数据值为3,代表数据格式为 unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像白平衡为:自动白平衡

 

 

项目30

 

04 A4:代表标签号,对应的标签名为DigitalZoomRatio

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

FF 0A 00 00:数据偏移量(地址0AFF)

 

Rational为有理数类型,计算结果用分子分母表示,同时,将黄框内数据按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,最终结果=0

 

项目31

 

05 A4:代表标签号,对应的标签名为FocalLengthIn35mmFilm

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

18 00 00 00:数据值=24

 

项目32

 

06 A4:代表标签号,对应的标签名为SceneCaptureType

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像场景拍摄类型为:标准

 

项目33

 

07 A4:代表标签号,对应的标签名为GainControl

03 00:数据值为3,代表数据格式为 unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像没有增益控制

 

 

项目34

 

08 A4:代表标签号,对应的标签名为Contrast

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像对比度“正常”

 

项目35

 

09 A4:代表标签号,对应的标签名为Saturation

03 00:数据值为3,代表数据格式为 unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像饱和度“正常”

 

项目36

 

0A A4:代表标签号,对应的标签名为Sharpness

03 00:数据值为3,代表数据格式为 unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像锐度“正常”

 

项目37

 

0C A4:代表标签号,对应的标签名为SubjectDistanceRange

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

00 00 00 00:数据值=0,值 '0x00' 表示图像主体距离范围“未知”

 

项目38

 

31 A4:代表标签号,对应的标签名为BodySerialNumber

02 00:数据值为2,代表数据格式为 ascii strings

30 00 00 00:组件数目=48(48个字节)

07 0B 00 00:数据偏移量(地址0B07)

 

红框位置为起始地址,偏移12个字节,黄框之内的为数据内容(48个字节,‘00’代表空格),验证如下图:

 

可交换信息

 

蓝框内数据可划分为两部分,前四个字节为第一部分,后两个字节为第二部分:

00 00 00 00:

02 00:目录项的数目=2

 

(注意:此部分的数据值为正向读值,原因????)

项目0

 

01 00:代表标签号,对应的标签名为InteroperabilityIndex

02 00:数据值为2,代表数据格式为 ascii string

04 00 00 00:组件数目=4(4个字节)

52 39 38 00:H(52393800)=ascii string(R98)

 

项目1

 

02 00:代表标签号,对应的标签名为InteroperabilityVersion

07 00:数据值为7,代表数据格式为Undefined

04 00 00 00:组件数目=4(4个字节)

30 31 30 30:H(30313030)=0100

 

 

GPS信息

 

蓝框内数据可划分为两部分,前四个字节为第一部分,后两个字节为第二部分:

00 00 00 00:

07 00:目录项数目=7

 

 

(注意:此部分的数据值为正向读值,原因????)

 

项目0

 

00 00:代表标签号,对应的标签名为GPSVersionID

01 00:数据值为1,代表数据格式为unsigned byte

04 00 00 00:组件数目=4(4个字节)

02 03 00 00:H(02)=2,H(03)=3,表示GPS版本为Ver.2.3

 

 

项目1

 

01 00:代表标签号,对应的标签名为GPSLatitudeRef

02 00:数据值为2,代表数据格式为ascii strings

02 00 00 00:组件数目=2(2个字节)

4E 00 30 73:H(4E003073)=ascii strings(N0s)

 

 

项目2

 

02 00:代表标签号,对应的标签名为GPSLatitude

05 00:数据值为5,代表数据格式为unsigned rational

03 00 00 00:组件数目=3(24个字节)

37 0B 00 00:字节数大于4个字节,该处数据代表数据的偏移量,地址为0B37

 

红框起始位置为地址的起始位置,红框内12个字节为偏移量,黄框内为数据内容。

 

Rational为有理数类型,计算结果用分子分母表示,将黄框内数据(24个字节)按每八个字节为一组,分为三个部分,对于每一部分按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,计算过程如下:

H(00 00 00 18)=24,H(00 00 00 01)=1,度=24/1=24;

H(00 00 00 18)=24,H(00 00 00 01)=1,分=24/1=24;

H(00 03 DC 32)=252978,H(00 00 27 10)=10000,秒=252978/10000=25.2978;

最终结果=24度24分25.2978秒

 

 

项目3

 

03 00:代表标签号,对应的标签名为GPSLongitudeRef

02 00:数据值为2,代表数据格式为ascii strings

02 00 00 00:组件数目=2(2个字节)

45 00 30 73:H(45003073)=ascii strings(E0s)

 

 

项目4

 

04 00:代表标签号,对应的标签名为GPSLongitude

05 00:数据值为5,代表数据格式为unsigned rational

03 00 00 00:组件数目=3(24个字节)

4F 0B 00 00:字节数大于4个字节,该处数据代表数据的偏移量,地址为0B4F

 

红框起始位置为地址的起始位置,红框内12个字节为偏移量,黄框内为数据内容。

Rational为有理数类型,计算结果用分子分母表示,将黄框内数据(24个字节)按每八个字节为一组,分为三个部分,对于每一部分按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,计算过程如下:

H(00 00 00 76)=118,H(00 00 00 01)=1,度=118/1=118;

H(00 00 00 00)=0,H(00 00 00 01)=1,分=0/1=0;

H(00 08 F9 96)=588182,H(00 00 27 10)=10000,秒=588182/10000=58.8182;

最终结果=118度0分58.8182秒

 

 

项目5

 

05 00:代表标签号,对应的标签名为GPSAltitudeRef

01 00:数据值为1,代表数据格式为unsigned byte

01 00 00 00:组件数目=1(1个字节)

00 00 00 00:数据值=0,值‘0X00’表示图像的高度参考为海平面

 

 

项目6

 

06 00:代表标签号,对应的标签名为GPSAltitude

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

67 0B 00 00:字节数大于4个字节,该处数据代表数据的偏移量,地址为(0B67)

 

红框起始位置为地址的起始位置,红框内12个字节为偏移量,黄框内为数据内容。

 

Rational为有理数类型,计算结果用分子分母表示,将黄框内数据(8个字节)按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,计算过程如下:

H(00 02 85 70)=165232,H(00 00 03 E8)=1000;

最终结果=165232/1000=165.232

 

 

缩略图信息(IFD1)

 

蓝框内数据可划分为两部分,前四个字节为第一部分,后两个字节为第二部分:

00 00 00 00:

06 00:目录项数目=6

 

 

项目0

 

03 01:代表标签号,对应的标签名为Compression

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

06 00 00 00:字节数小于4个字节,该处数据代表数据值,且数据值=6,即JPEG压缩格

 

项目1

 

1A 01:代表标签号,对应的标签名为XResolution

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

6F 0B 00 00:字节数大于4个字节,该处数据代表数据的偏移量,地址为(0B6F)

 

红框起始位置为地址的起始位置,红框内12个字节为偏移量,黄框内为数据内容。

 

Rational为有理数类型,计算结果用分子分母表示,将黄框内数据(8个字节)按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,计算过程如下:

H(00 00 00 48)=72,H(00 00 00 01)=1;

最终结果=72/1=72

 

项目2

 

1B 01:代表标签号,对应的标签名为YResolution

05 00:数据值为5,代表数据格式为unsigned rational

01 00 00 00:组件数目=1(8个字节)

77 0B 00 00:字节数大于4个字节,该处数据代表数据的偏移量,地址为(0B77)

 

红框起始位置为地址的起始位置,红框内12个字节为偏移量,黄框内为数据内容。

 

Rational为有理数类型,计算结果用分子分母表示,将黄框内数据(8个字节)按每四个字节进行翻转计算,前四位作为分子,后四位作为分母,计算过程如下:

H(00 00 00 48)=72,H(00 00 00 01)=1;

最终结果=72/1=72

 

 

项目3

 

28 01:代表标签号,对应的标签名为ResolutionUnit

03 00:数据值为3,代表数据格式为unsigned short

01 00 00 00:组件数目=1(2个字节)

02 00 00 00:字节数小于4个字节,该处数据代表数据值,数据值=2,即表示“厘米”

 

项目4

 

01 02:代表标签号,对应的标签名为JpegIFOffset

04 00:数据值为4,代表数据格式为unsigned long

01 00 00 00:组件数目=1(4个字节)

F4 0B 00 00:字节数等于4个字节,该处数据代表数据值,H(00 00 0B F4)=3060,表示到JPEG数据的偏移量为3060

 

 

项目5

 

02 02:代表标签号,对应的标签名为JpegIFByteCount

04 00:数据值为4,代表数据格式为unsigned long

01 00 00 00:组件数目=1(4个字节)

8D 29 00 00:字节数等于4个字节,该处数据代表数据值,H(00 00 29 8D)=10637,表示JPEG的数据大小为10637

 

DQT段

 

FF D8:文件头

FF :段标记

DB:段类型,DB代表定义量化表

00 84:段长度,H(84)=132字节,0C04-0C87

00:QT号=0,QT精度=8bit

 

SOF段

 

FF:段标记

C0:段类型,C0代表帧开始

00 11:段长度,H(11)=17字节,0C8A-0C9A

08:样本精度=8bit

00 78 00 A0:图像高=120,图像宽=160

03:组件数量=3,YCbCr彩色图

01:ID号=1,这是亮度Y组件

21:化为二进制=00010101,表明垂直采样系数=2,水平采样系数=1

00:使用QT号=0的量化表

02:ID号=2,这是色度的Cb组件

11:化为二进制=00010001,表明垂直和水平采样系数均=1

01:使用QT号=1的量化表

03:ID号=3,这是色度Cr组件

11:化为二进制=00010001,表明垂直和水平采样系数均=1

01:使用QT号=1的量化表

DHT段

 

FF:段标记

C4:段类型,C4代表定义霍夫曼表

01 A2:段长度,H(01 A2)=418字节,0C9D-0E3E

00:HT号=0,DC表

 

SOS段

 

FF: 段标记

DA: 段类型,DA代表扫描行开始

00 0C: 段长度=12字节

03: 组件数量=3

01 00:组件ID=1,Y组件,使用HT表号=0的AC表

02 11:组件ID=2,Cb组件,使用HT表号=1的DC表

03 11:组件ID=3,Cr组件,使用HT表号=1的DC表

00 3F 00:几乎每个JPG文件中这3个字节的值都相同,但用途不明

0E4D-358A:图像压缩数据

358B-358C:FF D9,文件尾

姿态信息部分:

FF E1:APP1

1F FE:H(1FFE)=8190字节,358F-558C为8190字节

 

http://ns.adobe.com/xap/1.0/<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>

<x:xmpmeta xmlns:x="adobe:ns:meta/">
 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <rdf:Description rdf:about="DJI Meta Data"
    xmlns:tiff="http://ns.adobe.com/tiff/1.0/"
    xmlns:exif="http://ns.adobe.com/exif/1.0/"
    xmlns:xmp="http://ns.adobe.com/xap/1.0/"
    xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:crs="http://ns.adobe.com/camera-raw-settings/1.0/"
    xmlns:drone-dji="http://www.dji.com/drone-dji/1.0/"
   xmp:ModifyDate="2017-04-07"
   xmp:CreateDate="2017-04-07"
   tiff:Make="DJI"
   tiff:Model="FC6310"
   dc:format="image/jpg"
   drone-dji:AbsoluteAltitude="+165.23"
   drone-dji:RelativeAltitude="+149.10"
   drone-dji:GimbalRollDegree="+0.00"
   drone-dji:GimbalYawDegree="-4.60"
   drone-dji:GimbalPitchDegree="-40.00"
   drone-dji:FlightRollDegree="-0.80"
   drone-dji:FlightYawDegree="-1.10"
   drone-dji:FlightPitchDegree="+6.60"
   drone-dji:CamReverse="0"
   drone-dji:GimbalReverse="0"
   crs:Version="7.0"
   crs:HasSettings="False"
   crs:HasCrop="False"
   crs:AlreadyApplied="False">
  </rdf:Description>
 </rdf:RDF>
</x:xmpmeta>
<?xpacket end="w"?>//末尾

① xmlns(XML Namespaces的缩写)是一个属性,是XML(标准通用标记语言的子集)命名空间。作用是赋予命名空间一个唯一的名称。

② Rdf:资源描述框架(Resource Description Framework),一种用于描述Web资源的标记语言。RDF是一个处理元数据的XML(标准通用标记语言的子集)应用,所谓元数据,就是“描述数据的数据”或者“描述信息的信息”。

需要的姿态数据位于FF E1部分,其中

红色部分:38AF——38D0:drone-dji:GimbalRollDegree=”+0.00”

绿色部分:38D5——38F5:drone-dji:GimbalYawlDegree=”-4.60”

蓝色部分:38FA——391D:drone-dji:GimbalPitchDegree=”-40.00”

相关的数据内容如下图:

目录
相关文章
数据解析之xpath 太6了
数据解析之xpath 太6了
|
12天前
|
存储 弹性计算 缓存
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
阿里云服务器ECS提供了多种通用型实例规格族,每种规格族都针对不同的计算需求、存储性能、网络吞吐量和安全特性进行了优化。以下是对存储增强通用型实例规格族g8ise、通用型实例规格族g8a、通用型实例规格族g8y、存储增强通用型实例规格族g7se、通用型实例规格族g7等所有通用型实例规格族的详细解析,包括它们的核心特点、适用场景、实例规格及具体指标数据,以供参考。
阿里云服务器ECS通用型实例规格族特点、适用场景、指标数据解析
|
5天前
|
消息中间件 canal 关系型数据库
Maxwell:binlog 解析器,轻松同步 MySQL 数据
Maxwell:binlog 解析器,轻松同步 MySQL 数据
38 11
|
10天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
1月前
|
数据采集 存储 JavaScript
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
在现代网页开发中,复杂的HTML结构给爬虫技术带来挑战。传统的解析库难以应对,而Cheerio和jsdom在Node.js环境下提供了强大工具。本文探讨如何在复杂HTML结构中精确提取数据,结合代理IP、cookie、user-agent设置及多线程技术,提升数据采集的效率和准确性。通过具体示例代码,展示如何使用Cheerio和jsdom解析HTML,并进行数据归类和统计。这种方法适用于处理大量分类数据的爬虫任务,帮助开发者轻松实现高效的数据提取。
如何使用Cheerio与jsdom解析复杂的HTML结构进行数据提取
|
18天前
|
存储 关系型数据库 MySQL
技术解析:MySQL中取最新一条重复数据的方法
以上提供的两种方法都可以有效地从MySQL数据库中提取每个类别最新的重复数据。选择哪种方法取决于具体的使用场景和MySQL版本。子查询加分组的方法兼容性更好,适用于所有版本的MySQL;而窗口函数方法代码更简洁,执行效率可能更高,但需要MySQL 8.0及以上版本。在实际应用中,应根据数据量大小、查询性能需求以及MySQL版本等因素综合考虑,选择最合适的实现方案。
90 6
|
1月前
|
XML JSON API
淘宝京东商品详情数据解析,API接口系列
淘宝商品详情数据包括多个方面,如商品标题、价格、图片、描述、属性、SKU(库存量单位)库存、视频等。这些数据对于买家了解商品详情以及卖家管理商品都至关重要。
|
27天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
64 0
|
2月前
|
监控 安全 网络安全
|
2月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
38 0

热门文章

最新文章

推荐镜像

更多
下一篇
无影云桌面