画像ファイルにEXIFデータが含まれているかどうかを検出するための安価で信頼性の高い方法はありますか?「最初の100バイトを読み取り、EXIFサブストリングを検索する」のようなものが非常に望ましいです。私はそれを読んで解析する必要はありません-それがそこにあるかどうかを知るためだけです。
重要なのは、それが非常に高速でなければならないということです。C++が望ましいです。
画像ファイルにEXIFデータが含まれているかどうかを検出するための安価で信頼性の高い方法はありますか?「最初の100バイトを読み取り、EXIFサブストリングを検索する」のようなものが非常に望ましいです。私はそれを読んで解析する必要はありません-それがそこにあるかどうかを知るためだけです。
重要なのは、それが非常に高速でなければならないということです。C++が望ましいです。
の実装を見ることができますfile (1)
。
もちろん、それを呼び出すこともできますが、おそらく残りの s 機能は必要ないfile
ので...
ストリームの最初の 4 バイトのみを確認する必要があります。
bool IsExifStream(const char* pJpegBuffer)
{
static const char stream_prefix1[] = "\xff\xd8\xff\xe1";
return memcmp(pJpegBuffer, stream_prefix1, 4) == 0;
}
PHP EXIF拡張機能のソースを読むことができます。exif_read_dataがどのように実装されているかを調べることで、いくつかの手がかりを見つけることができます。
大規模なパフォーマンスが必要ない場合は、いくつかの Exif ライブラリを使用して、Exif データ (存在する場合) を取得しようとします。(pyexif、perl Image::exif、c# MetaDataExtractor など)
さもないと、
http://en.wikipedia.org/wiki/JPEG#Syntax_and_structureを見てください
シンプルなバイナリパーサーを作成して「セグメントコード」を掘り出し、APP1 というセグメントを見つける必要があります (私が正しく理解している場合)。データには「Exif」の文字が含まれている必要があります
たとえば、私の PC 上のランダムな JPEG ファイルでは、バイト 7 ~ 10 が「Exif」と表示されていました。すべての JPEG ファイルで場所が同じかどうかはわかりません。セグメントは可変長であってもよい。