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で終わる.
原理が明らかになったら、直接コード:
他の画像フォーマットは、対応するフォーマット規範を学ぶ必要があります.このように、難しくないはずです.
ここでは,ファイルのバイナリストリームにより,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
他の画像フォーマットは、対応するフォーマット規範を学ぶ必要があります.このように、難しくないはずです.