本文不具体讨论JPG格式,只讨论如何在JPG文件中插入GPS信息,并顺带介绍一点有关EXIF规范的内容。
-
一般的JFIF格式的JPG文件结构
APP1的基本结构:
具体展开:
![5462305-4f38a965a62624df.png](https://i-blog.csdnimg.cn/blog_migrate/096cb2dc4dab70c05bf6f6e2034d18e6.webp?x-image-process=image/format,png)
![5462305-a346daca4c215d13.png](https://i-blog.csdnimg.cn/blog_migrate/f5c7eebe76f046e5ec62a37d0b9e43a5.webp?x-image-process=image/format,png)
- 一个具体的例子分析
SOI FF D8
APP1
FF E1 APP1段标识码
00 AC APP1段长度,不包括APP1的TAG字段
45 78 69 66 00 00 "Exif",以00 00 结尾
"Tiff header"
4D 4D "MM",表示大端模式
00 2A 固定值
00 00 00 08 0th IFD的偏移地址,从"MM"算起
0th IFD
00 01 IFD Pointer的个数,每个IFD段12个字节,这里只有GPS一个段
GPS IFD Pointer
88 25 GPS Info IFD Pointer,固定值
00 04 LONG,固定值
00 00 00 01 COUNT,固定值
00 00 00 16 GPS IFD的偏移地址,从"MM"算起,该偏移地址+0xC(SOI到“exif”)就是实际从文件开始的偏移地址
GPS IFD
00 07 GPS attribute的个数
00 00 GPSVersionID,固定值
00 01 BYTE,固定值
00 00 00 04 COUNT,固定值,4个BYTE
02 02 00 00 版本号,2.2.0.0
00 01 GPSLatitudeRef,固定值
00 02 ASCII,固定值
00 00 00 02 COUNT,固定值,2个ASCII
4E 00 00 00 北纬
00 02 GPSLatitude,固定值
00 05 RATIONAL,固定值
00 00 00 03 COUNT,固定值,3个RATIONAL
00 00 00 6C 实际Latitude的存放的偏移地址,从"MM"算起,+0xC为实际偏移地址
00 03 GPSLongitudeRef,固定值
00 02 ASCII,固定值
00 00 00 02 COUNT,固定值,2个ASCII
45 00 00 00 东经
00 04 GPSLongitude,固定值
00 05 RATIONAL,固定值
00 00 00 03 COUNT,固定值,3个RATIONAL
00 00 00 84 实际Longitude的存放的偏移地址,从"MM"算起,+0xC为实际偏移地址
00 05 GPSAltitudeRef,固定值
00 01 BYTE,固定值
00 00 00 01 COUNT,固定值,1个BYTE
00 00 00 00 以海平面为基准
00 06 GPSAltitude,固定值
00 0a SRATIONAL,固定值
00 00 00 01 COUNT,固定值,1个SRATIONAL
00 00 00 9C 实际Altitude的存放的偏移地址,从"MM"算起,+0xC为实际偏移地址
GPS value
00 00 00 71 00 00 00 01 00 00 00 37 00 00 00 01 00 00 00 6C 00 00 00 04 实际的Latitude值
0x71/0x01=113度 0x37/0x01=55分 0x6C/0x04=27秒
00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 01 00 00 00 00 00 0F 42 40 实际的Longitude
00 00 00 00 00 00 03 E8 实际的Altitude
APP0
FF E0 APP0段标识码
. .
. .
. .
- 附上具体代码
未完待续!