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"))));
  • 相关阅读:
    Packet Tracer 5.2实验(十五) 网络端口地址转换NAPT配置
    Packet Tracer 5.3实验(十六) 网络设备系统升级
    PostgreSQL学习手册(一) 数据表
    Access insert 语法错误
    Access2003转换成SQL2005。
    C#实现ACCESS数据库备份还原
    js 图片滚动
    根据日期算出天数
    datetime赋空值
    如何把Sql Server2005 数据库转换成Access
  • 原文地址:https://www.cnblogs.com/simpledev/p/3842334.html
Copyright © 2011-2022 走看看