Trong Java các byte
nguyên thủy được ký kết và có một phạm vi từ -128 đến 127, có nghĩa là ba[0]
bạn đi ra như -1
, trong khi 0xFF
được hiểu như là một int như 255
. Nếu bạn làm một phép toán AND với 0xFF
sử dụng toán tử &
này chuyển đổi các byte ký hợp đồng với giá trị đúng và mã của bạn sẽ làm việc, như sau:
File imgFile =
new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg");
byte[] ba = Files.toByteArray(imgFile); //Its a google guava library
int i = 0;
if((ba [i] & 0xFF) == 0xFF && (ba[i+1] & 0xFF) == 0xD8 && (ba[i+2] & 0xFF) == 0xFF
&& (ba[i+3] & 0xFF) == 0xE0) {
System.out.println("isJPEG");
}
Tôi không chắc chắn về logic chính xác mà bạn đang sử dụng tuy nhiên , như wikipedia khẳng định rằng những con số kỳ diệu cho hình ảnh JPEG như sau:
tập tin hình ảnh JPEG bắt đầu với FF D8 và kết thúc bằng FF D9
FF E0
là JFIF cụ thể, vì vậy bạn m ay muốn kiểm tra lý do tại sao bạn đang kiểm tra cho điều này
tăng gấp đôi Sau đây sẽ là mã để sử dụng để tiến hành kiểm tra theo Wikipedia:
File imgFile =
new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg");
byte[] ba = Files.toByteArray(imgFile); //Its a google guava library
int i = 0;
if((ba [i] & 0xFF) == 0xFF && (ba[i+1] & 0xFF) == 0xD8 && (ba[ba.length - 2] & 0xFF) == 0xFF
&& (ba[ba.length - 1] & 0xFF) == 0xD9) {
System.out.println("isJPEG");
}
Nguồn
2013-03-21 09:08:02
liên quan: http://stackoverflow.com/q/1915317/1055089 – Vrushank