public static final String TYPE_JPG = "jpg"; public static final String TYPE_GIF = "gif"; public static final String TYPE_PNG = "png"; public static final String TYPE_BMP = "bmp"; public static final String TYPE_UNKNOWN = "unknown"; /** * byte数组转换成16进制字符串 * @param src * @return */ public static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } /** * 根据文件流判断图片类型 * @param fis * @return jpg/png/gif/bmp */ public static String getPicType(FileInputStream fis) { //读取文件的前几个字节来判断图片格式 byte[] b = new byte[4]; try { fis.read(b, 0, b.length); String type = bytesToHexString(b).toUpperCase(); if (type.contains("FFD8FF")) { return TYPE_JPG; } else if (type.contains("89504E47")) { return TYPE_PNG; } else if (type.contains("47494638")) { return TYPE_GIF; } else if (type.contains("424D")) { return TYPE_BMP; }else{ return TYPE_UNKNOWN; } } catch (IOException e) { e.printStackTrace(); }finally{ if(fis != null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } //test code System.out.println("图片格式1: " + getPicType(new FileInputStream(new File("D:\\3_副本.png")))); System.out.println("图片格式2: " + getPicType(new FileInputStream(new File("D:\\3.png"))));
java代码判断图片文件格式, 不是根据文件后缀来判断。,布布扣,bubuko.com
原文:http://www.cnblogs.com/simpledev/p/3842334.html