画像形式をデータから判定する方法のメモ。
画像ファイルの形式は、画像データの先頭のバイト列のマジックナンバーをチェックすることで判定することができます。
画像 URL の拡張子と画像データの形式が一致しない場合でも、画像データの先頭をチェックすることで、画像形式の判定を行うことができます。
jpg: 先頭が 0xff 0xd8
png: 先頭が 0x89 0x50(P) 0x43(N) 0x47(G)
gif: 先頭が 0x47(G) 0x49(I) 0x46(F)
ちなみに、gzip の場合は先頭が 0x1f 0x8b となります。
例えば、perl の場合には以下のようにして判定を行うことができます。
画像ファイルの形式は、画像データの先頭のバイト列のマジックナンバーをチェックすることで判定することができます。
画像 URL の拡張子と画像データの形式が一致しない場合でも、画像データの先頭をチェックすることで、画像形式の判定を行うことができます。
jpg: 先頭が 0xff 0xd8
png: 先頭が 0x89 0x50(P) 0x43(N) 0x47(G)
gif: 先頭が 0x47(G) 0x49(I) 0x46(F)
ちなみに、gzip の場合は先頭が 0x1f 0x8b となります。
例えば、perl の場合には以下のようにして判定を行うことができます。
if ($obj =~ /^\xff\xd8/) { print("jpg\n"); } elsif ($obj =~ /^\x89\x50\x43\x47/) { print("png\n"); } elsif ($obj =~ /^\x47\x49\x46/) { print("gif\n"); } elsif ($obj =~ /^\x1f\x8b/) { print("gzip\n"); } else { print("other\n"); }