JPG插入GPS信息

本文不具体讨论JPG格式,只讨论如何在JPG文件中插入GPS信息,并顺带介绍一点有关EXIF规范的内容。

  • 一般的JFIF格式的JPG文件结构
    APP1的基本结构:


    JPG插入GPS信息_第1张图片

具体展开:


JPG插入GPS信息_第2张图片
JPG插入GPS信息_第3张图片
  • 一个具体的例子分析
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段标识码

.                   .
.                   .
.                   .
  • 附上具体代码
    未完待续!

你可能感兴趣的:(JPG插入GPS信息)