JPG图像exif和XPM信息中GPS数据姿态数据航向角数据的提取

JPG图像的编码相关内容太多不在多说了大家随手能查很多资料。
今天重点说说图像数据中的GPS信息以及飞机、相机姿态角度数据提取。
JPG作为复杂的图像数据很多人都知道存在一个叫做EXIF的数据规范,在这个数据规范中,包含了相机数据、拍摄数据、厂家信息以及GPS信息这样很多个数据信息,其中已经有GPS信息,当然,这是按照EXIF信息元的标准来写入的,查相关资料还是比较充分,整个这个部分总体的概念就是一个像二叉树又不像二叉树的链表,从前到后整体是顺序存储的,一般格式如下
JPG图像exif和XPM信息中GPS数据姿态数据航向角数据的提取上图中A是标志标示字,B是类型标识,C和D是变化的,一般情况C标示数据长度,而D一定注意,如果B所指类型是简单值则D就是对应的数值,如果B的所指的值是一个复杂数据或者可能是多组属于的,则D项应该是这些数据被存储的位置的偏移量(该偏移量还不包括前面标示本节开始的标志字之前的那些存储区域)
无论如何,这样的方式中找到常规的EXIF数据还是比较简单的,例如下图中就给出一个JPG图像开头部分的数据示意图;
图中有JPG标志字,后面有本节数据长度,注意A598这个数字在查找完本节侯如果查找下一节(XPM数据)时候要用。
JPG图像exif和XPM信息中GPS数据姿态数据航向角数据的提取注意上图中的GPS标识数据2588,这就是一个典型的指针概念,这个数据区域要按照前一个小图数据理解,尤其是第D组数据,起始就是告诉你GPS信息在后面你要再用给你的偏移量去寻找了。
当然了,找到GPS所在位置之后,还是记得,一定要按照第一个小图(ABCD四组数)的概念去解读,当然,里面具体经纬度数据给你的优势一个偏移地址,你还要再次去OFFSET去读数据计算的。(读者是不是觉得这个操作很烦,的确很烦,但这样的规定的确有他的好处的)

当然,说到这里,其实也就是很多人心目中如何寻找JPG图片里面的GPS数据了
【事实上,GPS数据在JPG文件中可能会有两处的】
第二种读取GPS数据的方法就是读取第二节数据,第二节数据往往是XPM数据,这种数据元被定义成了一种开放模式,大疆无人机的数据正是利用了XPM的开放模式把自己的GPS信息直接写入了JPG图像文件。
当然,写入图像文件的不仅仅是GPS数据,起始还有相机拍照时候的倾斜角度、拍照时候飞机的航向角等等数据,总体上可以看到如下所示的数据:

GpsLatitude
GpsLongitude
AbsoluteAltitude
RelativeAltitude
GimbalRollDegree
GimbalYawDegree
GimbalPitchDegree
FlightRollDegree
FlightYawDegree
FlightPitchDegree
有意思的是这些数据被以XML的格式写入了JPG图像文件的XPM数据段中

从下面这个XPM节中可以看到
开始的位置就是第一节(基本节)的长度A598加上字头4个字节,然后就可以看到标示位FFE1了,后面紧跟本节的数据总长度,那么,在这个节里面,就能看到DJI的数据项目,后面的内容,我相信,能理解如何找到XPM信息节的入口和得到他的总数据段长度,从中获得各个项应该不是难事了。
JPG图像exif和XPM信息中GPS数据姿态数据航向角数据的提取最后,把我写完的测试程序传上来大家可以看看,小工具不依赖任何开发框架或者运行组件,只要WINDOWS就能正常使用。
JPG图像exif和XPM信息中GPS数据姿态数据航向角数据的提取
【附件】:实用工具下载(免安装,不依赖任何开发运行环境,不需要任何组件,无任何广告嵌入。