ImageIo.read() 读取图片时返回Null的解决方法

ImageIO.read导致内存溢出问题 【代码】ImageIO.read导致内存溢出问题。 阅读详情
AI摘要

探讨了Java中处理WebP格式图片的问题,通常这些图片被误标记为JPG,导致ImageIO.read()方法返回null。介绍了如何通过引入webp-imageio-core库解决此问题,并提供了一个实用的图片格式判断方法。

最近做图片缩略图处理,大部分使用java自带的ImageIO.read( InputStream )都能读取到图片,但是总有一小部分jpg图片无法读取到,read()方法会返回一个null,无法对这部分图片处理。

查阅了很多资料,了解到这部分图片基本上都是webp格式的图片。这些图片虽然文件后缀是jpg,但是实际格式是webp,用记事本打开可以看到,如图。webp是谷歌2010新出的图片类型,java无法支持这种格式的图片,正常的方式读取就会报空。

引入webp-imageio-core-0.1.0.jar,即可正常读取。

git地址:Releases · nintha/webp-imageio-core · GitHub,推荐使用0.1.0版本,0.1.3版本测试缺少类库

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

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

Java图片处理ImageIO.read()问题 NULL 博文链接:https://o-oand0-0.iteye.com/blog/1585854 立即下载

相关推荐

webp-imageio-10.和1.6(不要积分)

webp-imageio-10.和1.6(不要积分)

ImageIO 读取图片

ImageIO中提供的read方法,提供了多个重载目的是能够读取图片到内存中;其实现原理是使用ImageReader把图片读取到内存中。

Mointor 4065

无监督学习初探:K-Means聚类与主成分分析(PCA)

K-Means适用于快速分组,但对数据分布敏感,可结合轮廓系数评估质量。PCA通过特征值分解实现线性降维,需注意非线性场景的替代方案(如UMAP)。进阶方向:聚类:谱聚类、高斯混合模型(GMM)处理复杂形状。降维:t-SNE、自编码器处理非线性结构。

weixin_69882801的博客 1453

ImageIo.read 返回null

一、问题描述 今天收到一个bug就是imageio读取图片会返回null,具体如下 但是其他的图片就没有问题 二、问题分析 结合百度发现这张图片原本的后缀并非是jpg,使用notpard++打开就可以发现 好家伙是webp格式的!!!! WebP是google开发的一种旨在加快图片加载速度的图片格式。图片压缩体积大约只有JPEG的2/3,并能节省大量的服务器带宽资源和数据...

也许是偶然R 5742

离线AI实战指南:本地部署大模型处理PDF/Word/Excel

离线AI是指在无网络、不上传数据前提下,于个人设备运行大语言模型并完成文档理解、多轮对话与代码辅助等任务的技术方案。其核心依赖本地模型推理、文档解析向量化和轻量级对话调度三大能力。随着Phi-3、Qwen2、Llama3等轻量化开源模型普及,以及Ollama、LM Studio等易用工具成熟,普通用户已可在主流笔记本上实现PDF摘要、合同比对、代码注释等真实办公场景。本文聚焦离线AI的硬件适配、模型选型、文件处理链路与知识库构建,尤其强调中文OCR支持、结构化文档提取与CPU/GPU混合推理优化,助力非开发

weixin_31968639的博客 493

RV1126B芯片实战:如何用这款视觉处理器SoC打造你的第一个AI摄像头项目

本文详细介绍了如何利用瑞芯微RV1126B视觉处理器SoC从零构建AI摄像头项目。涵盖硬件选型、开发环境搭建、ISP配置、AI模型部署及系统集成等关键步骤,帮助开发者高效实现边缘计算方案,特别适合智能安防和工业检测应用。

dropout6artist的博客 931

利用Java打开图片以及解决ImageIO.read()返回null

利用Java打开图片: //////显示图片//// count=0; Image image = null; String imageDir=String.format("test%d.jpg",count); // 读取图像

weixin_44262126的博客 4080

stm32H743IIT6 cubemx HAL USB UVC摄像头基础

stm32性能已经很强了, 可以驱动ov5640摄像头, 所以可以把摄像头接在stm32上, 当作一个摄像头驱动器, 连接到电脑上 开发环境: stm32cubemx 6.0.1 单片机: 自己做的stm32h743iit6核心板,兼容正点原子 学习资料: 圈圈学USB 鱼鹰谈单片机 从零开始学习USBhttps://to-run-away.blog.csdn.net/article/details/85038393 整个项目是基于CDC串口上修改 1 stm32 USB 代码概览 ..

紫枫洛天的博客 7750

解决ImageIO.read返回为null的问题

解决windows系统下,以下语句返回null, ImageIO.read(new File(filepath)); pom.xml中引入 <dependency> <groupId>com.twelvemonkeys.imageio</groupId> <artifactId>imageio-tiff</artifactId...

wxmgcs的专栏 7782

地理空间坐标系统-不同椭球基准间的坐标转换

基于同一个椭球基准,可以构建三类地理空间坐标系:大地球面坐标系、大地空间直角坐标系、大地投影坐标系。由于坐标原点和椭球长短半径等都相同,这三类坐标系之间可以通过无损的数学方法相互之间进行转换。那么现在问题来了,不同椭球基准(在全球范围来看存在成百上千的椭球基准)之间的坐标怎么转换?比如,北京54、西安80、国家2000,特别是在我国,现在主推国家2000坐标系,那么如何将历史的测绘成果(北京54和...

技术改变世界 8336

细说STM32单片机SPI-Flash芯片的FatFS移植及其应用实例详解

本文以开发板上的SPI-Flash芯片W25Q16为媒介详细介绍CubeMX中FatFS各个参数的意义和设置,分析生成的代码中FatFS各个文件的作用和关联,完成针对W25Q16的硬件访问层的移植。继续使用旺宝红龙开发板STM32F407ZGT6 KITV1.0。

wenchm的博客 1640

ImageIo.read() 读取图片时返回Null异常

最近在做前端图片展示时遇到的问题,前端上传了图片,后端保存后,返回图片的展示地址,前端再根据地址展示图片,但是前端上传的图片,有一些能正常展示,有一些为空白,查看后端发现返回的BufferedImage为空,BufferedImage是由ImageIO.read读取出来。查看图片发现,虽然上传的图片都是以jpg,png或者jpeg为后缀的,但是实际上的图片格式却是.webp,用记事本打开可看到。 webp是谷歌2010新出的图片类型,java无法支持这种格式的图片,正常的方式读取就会报空。只需要在项目中添加

jf991804033的博客 3585

Go语言爬虫:chromedp 的详细使用

chromedp 是 Go 语言中无头浏览器自动化的终极利器。它能驱动真实的 Chrome 浏览器,处理 JavaScript 渲染、复杂交互和反爬虫机制

数据知道的博客 4492

ImageIO.read()返回null的原因及处理办法

最近在使用ImageIO.read()读取图片时,发现有的图片会返回null,有的图片时正常的。

muhuixin123的博客 4114

辉芒微教程第七篇《PWM与PWM3调节LED灯的亮度》

这个其实就是PR3L = 128设置的,由于我们刚刚寄存器设置了8位模式,其设置的范围就是0-255,而128/255≈50%左右,因此PR3L就是我们的占空比调节的寄存器,我们可以通过它来调节占空比,大家可以试试它占空比设置10%,30%,60%来看看它的不同效果,灯的亮度是肯定不一样的,如果有条件的朋友,可以购买一款逻辑分析仪去看他的占空比。平平无期的这个东西有什么东东用,貌似是没什么用,只是一个概念而已,是不是不同设备可以设置1秒,3秒,10秒的周期就行?但是它占空比为什么是50%,怎么得来的?

qq_41809823的博客 826

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ImageIO.read() 返回 null

现象(问题描述) 今天线上出现了一个问题 BufferedImage prevImage = ImageIO.read(inputStream) 调试跟进去发现prevImage = null,可是输入流是好好的,而且输入流对应的图片也能打开,但 ImageIO.read返回就是null 解决过程 后来在网上查找ImageIO用法知道,它可读取的图片类型是有限制的,可以读取图片的格式为:[BMP,...

复利人生的博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ImageIo read() 读取图片时返回 Null

利用:String names[] = ImageIO.getReaderFormatNames();  String names[] = ImageIO.getReaderFormatNames();得到 ImageIo 可以读取图片的格式 :[BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif] 而当我们读取

天上满是飞机 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ImageIO.read(InputStream)返回null问题

ImageIO.read(InputStream)返回null问题 问题背景 在上传图片的时候,ImageIO.read(InputStream)能够正常读取图片,代码如下 //org.springframework.web.multipart.MultipartFile uploadFile InputStream input = uploadFile.getInputStream();...

zhibin的程序日记 1万+

ImageIO.read为null

在使用ImageIO.read的时候,返回发现是null Image src = ImageIO.read(new File("D:\\a.jpg")); 一般出现这个问题,是因为你的a.jpg图片可能有问题,可能强制转换过图片的类型png还是jpg什么的。

susu1083018911的博客 5969

ImageIO读取图片报错:imageio.IIOException: Can‘t read input file以及 IllegalArgumentException: input == null!

ImageIO读取图片报错读取图片文件位置报错javax.imageio.IIOException: Can't read input file!图片文件引入写法出错Exception in thread "main" java.lang.IllegalArgumentException: input == null!* **希望能解决小伙伴们的报错!!!!!!!!!!!!!!!* ** 读取图片文件位置报错 javax.imageio.IIOException: Can’t read input file

bug大师的博客 5668

浅析Java中ImageIO.read(file)返回值出现null

就是说,ImageIO.read(file)返回null了,我换成其他的图片就没问题,但是就这张图片一直有问题,这到底是怎么回事?

小筱在线博客 1459

ImageIO.read() 读取图片异常

1.发现问题 问题:在公司调用read(File input) 是发现返回值为null,上传的图片为xxx.jpg,但是无法正常返回BufferedImage对象。 原因检测:将异常图片上传到图片检测网站发现该图片的真正格式为webp,而java的ImageIO无法识别该格式,导致NPE异常 2.解决思路 检测改图片的真正类型 在使用ImageIO之前进行类型判断。 ...

z5211875的博客 5159

ImageIO.read(InputStream input);读取图片文件为null

ImageIO.read(url.openStream())这里返回空值,在获取图片时图片的真实格式为webp格式所以无法读取,

qq_45000856的博客 1883

Java 开发 - ImageIO read 方法返回 null 的情况、ImageIO 支持的格式

Java 开发 - ImageIO read 方法返回 null 的情况、ImageIO 支持的格式

weixin_52173250的博客 514

ImageIO.read() 读取webp图片报null异常

今日踩坑: 如题: ImageIO.read(),如果文件是webp图片时,返回的BufferedImage为空。 原因:java不支持webp图片(存疑) 解题: gradle:引包 // https://mvnrepository.com/artifact/org.sejda.webp-imageio/webp-imageio-sejda implementation group: 'org.sejda.webp-imageio', name: 'webp-imageio-sejda',

Liheling04的博客 2006

ImageIO.read(URL) 返回 null

ImageIO.read(URL) 返回 null 项目场景: 修改BUG:ImageIO.read(URL) 返回 null 问题描述: ImageIO.read(URL) 返回 null,百度找了很多帖子,都说是图片格式不对,导入相应的jar包就能解决,但是我弄了半天还是没用 原因分析: URL不对,不能用http协议,必须要https才行 解决方案: 把URL里的http换成https,问题就解决了,在这记录一下 ...

D_OO_D的博客 1137
下一篇: 关于微信二次分享图标和标题丢失踩过的那些坑~
Apoca_lypse
博客等级 码龄7年 3粉丝 7原创
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值