zoukankan      html  css  js  c++  java
  • 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"))));
  • 相关阅读:
    [洛谷2397]yyy loves Maths VI
    subs函数
    JSON 对象和字符串
    JSON添加注释的问题
    给定一个数组求里面数字拼在一起组成的最小数字
    为什么集合类没有实现Cloneable和Serializable接口
    Java 接口
    Unicode(统一码、万国码、单一码)
    meta 中的属性viewport
    meta标签
  • 原文地址:https://www.cnblogs.com/simpledev/p/3842334.html
Copyright © 2011-2022 走看看