java代码判断图片文件格式, 不是根据文件后缀来判断。

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”))));

猜你喜欢

转载自blog.csdn.net/h993438890/article/details/88738470