Java判断图片文件的格式是否为jpg
这里不讨论通过文件后缀名的判断方式,因为可以很容易的手动修改后缀名。
?
这里讨论如何通过文件的二进制流来判断一张图片是否为jpg格式的图片。对图像图像不太了解,请教了一位图像方向的同事后,大致了解了一些,这里写出来,作为笔记和分享。
?
原理很简单:所有JPG/JPEG格式的图片都是以十六进制的'FF D8'作为文件开始,'FF D9'作为文件结束标志。FF等为16进制数据,占文件的1 byte。如果没有带相机信息的jpg图片,第7, 8, 9, 10这4位上分别是字符'JFIF'的16进制表示,用UltraEdit打开可以直接看到;如果带有相机信息,有可能与不带信息的不同,也可能相同,不同的话在那4位上为'Exif'字符的16进制表示,但是他们都是以FF D8开始,FF D9结束。
?
原理清楚后,直接代码:
?
?
InputStream bin = new FileInputStream("C:/Users/wuyao/Desktop/sisu.jpg"); // a jpg fileint 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?
?
其他图片格式需要再学习相应的格式规范,以此类推,应该不难。
?