ファイル全体を読み込まずに、ファイルがどのような画像形式であるかを推測する方法はありますか?

StackOverflow https://stackoverflow.com/questions/52739

  •  09-06-2019
  •  | 
  •  

質問

ファイル全体をメモリに読み込まずに、画像がどのような形式であるかを確認する良い方法はありますか?

明らかに、これは形式によって異なります (私は特に TIFF ファイルに興味があります) が、ファイル全体を読み込まずにファイルの種類の画像形式を判断するには、どのような手順が役立つでしょうか?

ボーナス:画像が Base64 でエンコードされた文字列の場合はどうなるでしょうか?デコードする前にそれを推測する信頼できる方法はありますか?

役に立ちましたか?

解決

ほとんどの画像ファイル形式には、先頭に固有のバイトがあります。ユニックス file コマンドはファイルの先頭を調べて、そこに含まれるデータの種類を確認します。ウィキペディアの記事を参照してください ファイル内のマジックナンバー そして マジックデータベース.org.

他のヒント

確かにあります。他の人が述べたように、ほとんどの画像はある種の「マジック」で始まり、常にある種の Base64 データに変換されます。以下にいくつかの例を示します。

ビットマップは次のように始まります Qk3

Jpeg は次のように始まります /9j/

GIF は次で始まります R0l (これは 2 番目の文字としてのゼロです)。

等々。さまざまな画像タイプを取得し、それらが何にエンコードされるかを理解するのは難しくありません。いくつかの魔法には複数の魔法が含まれているため、B64 の「変換コード」でそれらを考慮する必要があることに注意してください。

どちらか file *nix コマンドラインで実行するか、ファイルの最初のバイトを読み取ります。ほとんどのファイルには、最初の数バイトに固有のヘッダーが付いています。たとえば、TIFF のヘッダーは次のようになります。

0x00000000: 4949 2a00 0800 0000
TIFF ファイル形式の詳細について、特にこれらのバイトが何を表しているのか知りたい場合は、次のサイトを参照してください。 ここ.

ファイル形式の総合的なサイトは次の場所にあります。

http://www.wotsit.org

TIFF は II または MM (Intel バイト オーダーまたは Motorolla) で始まります。
TIFF 6 仕様はダウンロードできます ここ 従うのはそれほど難しくありません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top