Javaは画像ファイルのフォーマットがjpgであるか否かを判断する


ここでは,接尾辞名を手動で簡単に修正できるため,ファイル接尾辞名による判断については議論しない.
 
ここでは,ファイルのバイナリストリームにより,1枚のピクチャがjpg形式のピクチャであるか否かを判断する方法について議論する.画像画像についてよく知らないので、画像の方向を教えてもらった同僚に、大体理解してもらいました.ここに書いて、メモと共有します.
 
原理は簡単です.すべてのJPG/JPEG形式の画像は16進数の「FFD 8」をファイルとして、「FFD 9」をファイル終了フラグとしています.FFなどは16進数データで,ファイルの1 byteを占める.カメラ情報付きjpgピクチャがなければ、7,8,9,10の4桁にそれぞれ文字「JFIF」の16進数表示があり、UltraEditで開くと直接見ることができます.カメラ情報を持っていれば、持っていない情報と違うかもしれないし、同じかもしれないし、違うとその4桁で「Exif」文字の16進表記になるかもしれないが、いずれもFFD 8で始まり、FFD 9で終わる.
 
原理が明らかになったら、直接コード:
 
 
InputStream bin = new FileInputStream("C:/Users/wuyao/Desktop/sisu.jpg"); // a jpg file
int b[] = new int[4];
b[0] = bin.read();
b[1] = bin.read();
bin.skip(bin.available() - 2);
b[2] = bin.read();
b[3] = bin.read();

bin.close();

boolean m = bin.markSupported();

for (int e : b) {
	System.out.print(e + "-");
}

// 
StringBuffer buf = new StringBuffer("");
for (int e : b) {
	buf.append(e);
	buf.append(", ");
}
buf.delete(buf.length() - 2, buf.length());
System.out.println(buf.toString());
// should be: 255, 216, 255, 217

 
 
他の画像フォーマットは、対応するフォーマット規範を学ぶ必要があります.このように、難しくないはずです.