4

写真から地理位置情報を取得する必要があります。緯度/経度と GPS バージョン。この質問に関連する情報をすでに見つけました。さまざまな EXIF ヘッダーを比較し、座標を示す 16 進数のダンプを見つけました。ファイルから取得する必要があります。

質問は非常に単純に思えるかもしれません。Delphi で JPEG ファイルを開いて必要な 16 進数のダンプを取得するにはどうすればよいですか?

すでに文字と整数を読み取ろうとしましたが、何も機能しませんでした。可能であれば、このタスクに外部ライブラリを使用したくありません。

これは基本的に私の主要な質問ですが、誰かがもう1つ答えてくれると非常にうれしいです.

特定のダンプのファイルを検索せずに GPS タグを検索する簡単な方法はありますか? 今、私は本当にうまくいく奇妙な組み合わせ 12 00 02 00 07 00 を探しています。EXIF のドキュメントを読みましたが、GPS タグについてはよくわかりませんでした。

4

1 に答える 1

7

外部ライブラリが必要ない場合は、TFileStream とバイト配列を使用してこれを行うことができます。「写真撮影日」を取得するプロジェクトでこれを実行しました。GPS 緯度経度座標は、EXIF ヘッダーの別のフィールドです。ここにコードはありませんが、方法は簡単です: JPEG ファイルへの TFileStream を取得したら:

  • 最初の 2 バイトを読み取り、実際に $FF $D8 であることを確認します (有効な JPEG であることを確認するため)。
  • 次の 2 バイトを読み取り、それが $FF $E1 かどうかを確認します
    • そうでない場合は、セグメントに応じて、さらに 2 バイト (または 1 ワード) を読み取り、そのバイト数をスキップします (ストリームの Seek メソッドを呼び出すことにより)。ここにセグメントのリストがあります: https://en.wikipedia.org /wiki/JPEG#Syntax_and_structure ; それから繰り返す
  • 存在する場合は、4 バイトを読み取り、「Exif」であるかどうかを確認します ($45 $78 $69 $66)
  • 続くのは $00 $00 とendiannessなどの一般的な情報を保持する 8 バイトの TIFF ヘッダーです。その後に、必要なものを取得するために必要な EXIF タグが続きます。簡単に検索して、ここにリストを見つけました: http:/ /www.exiv2.org/tags.html

EXIF データは JPEG ファイルの最初のキロバイトにあると想定しても安全なので、バイト配列 (または TMemoryStream) でこれだけを読み取り、そこでデータを処理できます。これは、TFileStream から個別に小さな読み取りを行うよりも優れたパフォーマンスを発揮するはずです。

于 2013-09-04T21:54:33.457 に答える