首页 > 编程语言 >JAVA判断图片真实格式的方法

JAVA判断图片真实格式的方法

时间:2023-11-29 10:25:16浏览次数:35  
标签:真实 return String contains hex else header 格式 JAVA

判断图片真实格式的方法,文件格式不是看后缀名,而是看文件头的定义

 public class ImgUtil {
    public static String imgType(InputStream inputStream) throws IOException {
        // 读取文件前几位
        byte[] fileHeader = new byte[4];
        int read = inputStream.read(fileHeader, 0, fileHeader.length);
        inputStream.close();
        
        // 转为十六进制字符串
        String header = ByteUtil.bytes2Hex(fileHeader);
        
        if (header.contains("FFD8FF")) {
            return "jpg";
        } else if (header.contains("89504E47")) {
            return "png";
        } else if (header.contains("47494638")) {
            return "gif";
        } else if (header.contains("424D")) {
            return "bmp";
        } else if (header.contains("52494646")) {
            return "webp";
        } else if (header.contains("49492A00")) {
            return "tif";
        } else {
            return "unknown";
        }
 
    }
 
    public static String bytes2Hex(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(b & 0xff);
            sb.append(hex.length() == 2 ? hex : ("0"+hex));
        }
        return sb.toString();
    }
 
    public static void main(String[] args) throws IOException {
        String path ="D:\\panda.webp";
        File file = new File(path);
        System.out.println(ImgUtil.imgType(new FileInputStream(file)));
    }
}

 

标签:真实,return,String,contains,hex,else,header,格式,JAVA
From: https://www.cnblogs.com/mihutao/p/17863917.html

相关文章

  • JavaScript 的基本规范
    在平常项目开发中,我们遵守一些这样的基本规范,比如说:(1)一个函数作用域中所有的变量声明应该尽量提到函数首部,用一个var声明,不允许出现两个连续的var声明,声明时  如果变量没有值,应该给该变量赋值对应类型的初始值,便于他人阅读代码时,能够一目了然的知道变量对应的类型值。(2)......
  • java-生成二维码/条形码
    前言:  需求:生成二维码/条形码//使用ZXing库<dependencies><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version></dependency>&l......
  • java 线上问题跟踪用到的工具
    java线上问题跟踪用到的工具pref可以跟踪jvm进程的方法调用频度分析一些问题gperftools这东西还需要编译安装比较麻烦,需要运维提前安装好arthans阿里的一个在线工具挺不错的jvm内置工具jstat-gcpidjmap-heappidlinux提供的pmap-xpidtop-Hppid查看这个p......
  • C:\Users\17482\Desktop\ERP——test1\SpringBoot-ERP-master\src\main\java
    这个错误表明在你的Java类文件UserImp.java中,找不到MyBatis的注解包org.apache.ibatis.annotations。这个包中包含了MyBatis的注解,比如@Select、@Insert等。首先,请确保你的项目正确引入了MyBatis的依赖。在你的pom.xml文件中应该包含类似以下的依赖配置:<dependency......
  • idea报错,java: 程序包org.apache.ibatis.annotations不存在
    这个错误表明在你的项目中,IDEA找不到MyBatis的注解包org.apache.ibatis.annotations。这个包通常包含了一些MyBatis的注解,比如@Select、@Insert等,用于在接口中定义SQL查询或操作。解决这个问题的方法有几个:1.检查MyBatis依赖:确保在你的Maven或Gradle项目中正确......
  • class lombok.javac.apt.LombokProcessor
    classlombok.javac.apt.LombokProcessor(inunnamedmodule@0x4587f0f9)cannotaccessclasscom.sun.tools.javac.processing.JavacProcessingEnvironment(inmodulejdk.compiler)becausemodulejdk.compilerdoesnotexportcom.sun.tools.javac.processingtounn......
  • Java集合框架之:ArrayList的常见方法使用
    ✨前言✨  Java本文主要介绍JavaArrayList的使用方法教程及示例代码......
  • 大数据实验(Mysql、hbase、redis、MongoDBjava客户端连接)
    1.MySQL启动:虚拟机输入mysql-uroot-p输入密码:hadoop(黑马的mysql密码是hadoop)pom.xml需要引入mysql<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></proper......
  • 在idea中无法查看org.springframework.cglib.core.Signature.java 源码
    一、现象1.点击ideaDownloadSource,没有变化;ChouseSource也无济于事。2.打开下载的源码包,惊奇的发现确实没有对应的源码。3.问题发生在哪儿?原来是这些包原本不属于spring,spring在编译的时候直接修改了包名称。 ......
  • java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.LoopTag问题的解决
    问题描述问题解决将这个依赖:改成这个依赖:......