ファイル全体をメモリに読み込まずに、画像の形式を確認する良い方法はありますか?
明らかに、これは形式によって異なります (特に TIFF ファイルに興味があります) が、ファイル全体を読み取ることなく、ファイルがどのような種類の画像形式であるかを判断するには、どのような手順が役立ちますか?
ボーナス: 画像が Base64 でエンコードされた文字列の場合はどうなりますか? デコードする前にそれを推測する信頼できる方法はありますか?
ほとんどの画像ファイル形式には、先頭に固有のバイトがあります。unixfile
コマンドは、ファイルの先頭を調べて、ファイルに含まれるデータの種類を確認します。ファイル内のマジック ナンバーに関するウィキペディアの記事とmagicdb.orgを参照してください。
確かにあります。他の人が述べたように、ほとんどの画像はある種の「魔法」で始まり、常にある種の Base64 データに変換されます。次にいくつかの例を示します。
ビットマップは次で始まりますQk3
JPEGはで始まります/9j/
GIF はR0l
(2 番目の文字がゼロ) で始まります。
等々。さまざまな画像タイプを取得して、それらが何にエンコードされているかを理解することは難しくありません。一部の魔法は複数の魔法を持っているため、B64「変換コード」でそれらを考慮する必要があるため、注意してください。
TIFF は、II または MM (Intel バイト順序または Motorolla) のいずれかで始まります。
TIFF 6 仕様はここからダウンロードでき、従うのは難しくありません。
* nixfile
コマンドラインで、またはファイルの最初のバイトを読み取る。ほとんどのファイルには、最初の数バイトに一意のヘッダーが含まれています。たとえば、TIFF のヘッダーは次のようになります。
0x00000000: 4949 2a00 0800 0000TIFF ファイル形式の詳細については、特にこれらのバイトが何を表しているかを知りたい場合は、ここにアクセスしてください。