4

我需要从我的照片中获取地理位置信息。纬度/经度和 GPS 版本。我已经找到了一些与这个问题相关的信息,我比较了不同的 EXIF 标头并找到了一个十六进制转储,它给了我坐标 - 现在我需要从文件中获取它。

这个问题可能看起来很简单。如何在 Delphi 中打开 JPEG 文件以获得必要的十六进制转储?

已经尝试阅读字符和整数,但没有任何效果。如果可能,我不想为此任务使用任何外部库。

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

有没有一种简单的方法来搜索 GPS 标签而不搜索特定转储的文件?现在我正在寻找一个奇怪的组合 12 00 02 00 07 00,它确实有效。我已经阅读了 EXIF 文档,但我无法真正理解 GPS 标签的内容。

4

1 回答 1

7

如果您不需要外部库,您可以使用 TFileStream 和一个字节数组来执行此操作。我在一个项目中完成了这个以获得“照片拍摄日期”,GPS lat-long 坐标只是 EXIF 标题中的另一个字段。我这里没有代码,但方法很简单:一旦你有一个 TFileStream 到 JPEG 文件:

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

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

于 2013-09-04T21:54:33.457 回答