使用Delphi阅读Exif GPS信息

use*_*662 2 delphi gps jpeg file

我需要从我的照片中获取地理定位信息.Lat/Lon和GPSVersion.我已经找到了一些与此问题相关的信息,我比较了不同的EXIF标题,发现了一个十六进制转储,它给了我坐标 - 现在我需要从文件中获取它.

这个问题似乎很简单.如何在Delphi中打开JPEG文件以获取必要的十六进制转储?

已经尝试过阅读Chars和Integers,但没有任何效果.如果可能,我不想使用任何外部库来完成此任务.

这基本上是我的主要问题,但如果有人再回答一个问题,我会非常高兴.

有没有一种简单的方法来搜索GPS标签而无需搜索文件进行特定转储?现在我正在寻找一个奇怪的组合12 00 02 00 07 00,这真的有效.我读过EXIF文档,但我无法理解GPS标签.

先感谢您.尤金

Sti*_*ers 5

如果不需要外部库,可以使用TFileStream和一个byte数组来完成.我在一个项目中完成了这个以获得'拍摄日期',GPS纬度坐标只是EXIF标题中的另一个字段.我没有这里的代码,但方法很简单:一旦你有一个TFileStream到JPEG文件:

  • 读取前2个字节,检查它实际上是$ FF $ D8(只是为了确保它是有效的JPEG)
  • 读取接下来的2个字节,检查它是否为$ FF $ E1
  • 如果是,读取4个字节,看看它是否是'Exif'($ 45 $ 78 $ 69 $ 66)
  • 接下来是$ 00 $ 00和一个8字节的TIFF标题,其中包含一些信息,如endianness,然后是您需要处理的EXIF标记并抓住您需要的标记,我快速搜索并在此处找到一个列表:http:/ /www.exiv2.org/tags.html

由于可以安全地假设EXIF数据位于JPEG文件的第一个千字节中,因此您可以在字节数组(或TMemoryStream)中读取这些数据并在那里处理数据,这应该比从TFileStream中单独的小读取执行得更好.