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"))));
  • 相关阅读:
    LeetCode Array Easy 414. Third Maximum Number
    LeetCode Linked List Medium 2. Add Two Numbers
    LeetCode Array Easy 283. Move Zeroes
    LeetCode Array Easy 268. Missing Number
    LeetCode Array Easy 219. Contains Duplicate II
    LeetCode Array Easy 217. Contains Duplicate
    LeetCode Array Easy 189. Rotate Array
    LeetCode Array Easy169. Majority Element
    LeetCode Array Medium 11. Container With Most Water
    LeetCode Array Easy 167. Two Sum II
  • 原文地址:https://www.cnblogs.com/simpledev/p/3842334.html
Copyright © 2011-2022 走看看