从JPG图像的十六进制中提取GPS元数据

时间:2017-05-01 16:37:14

标签: gps hex metadata extract exif

我试图在本教程后从十六进制中提取GPS元数据,但无法理解为什么最后纬度和经度的长度为24,值为42和73: http://itbrigadeinc.com/post/2012/03/06/Anatomy-of-a-JPG-image.aspx http://www.itbrigadeinc.com/post/2012/03/16/Seeing-the-EXIF-data-for-a-JPG-image.aspx

我找到了纬度和经度(00 02 00 05 00 00 00 03 00 00 02 42)和(00 04 00 05 00 00 00 03 00 00 02 5A)的标签。据我所知,如果count = 3,那么它们的值应该跟在标签的最后4个字节中。但02 42和02 5A不是" 42"和" 73" ...

谁能解释我的错误?

请不要推荐任何工具 - 我需要手动完成。

2 个答案:

答案 0 :(得分:1)

您还需要考虑每个值的大小。计数为3,但每个的大小大于一个字节。因此它不适合四个字节,这四个字节表示该值的偏移量。

GPS数据通常存储为三个有理数,其中每个有理数是两个32位整数(分子,分母)。因此,纬度有三个值,但每个值为8个字节。 24个字节不适合TIFF标记,因此它存储在文件中的其他位置,您看到的四个字节是指向它的指针。您需要查看规范以找出指针相对的位置,因为它可能不是文件的开头。

查看我的元数据提取器库(在Java和C#中)以供参考。

答案 1 :(得分:0)

显然24位数据类型是PropertyTagTypeRational https://msdn.microsoft.com/en-us/library/ms534414(v=vs.85).aspx

  

指定值数据成员是一组无符号长整数的数组。每对代表一个分数;第一个整数是分子,第二个整数是分母。

主要来自:Getting GPS data from an image's EXIF in C#

这段python代码也可能对如何解码数据有一个很好的提示http://eran.sandler.co.il/2011/05/20/extract-gps-latitude-and-longitude-data-from-exif-using-python-imaging-library-pil/