ImageIO.read() 返回 null

Posted tanyucong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ImageIO.read() 返回 null相关的知识,希望对你有一定的参考价值。

现象(问题描述)

今天线上出现了一个问题 BufferedImage prevImage = ImageIO.read(inputStream) 调试跟进去发现prevImage = null,可是输入流是好好的,而且输入流对应的图片也能打开,但 ImageIO.read返回就是null

解决过程

后来在网上查找ImageIO用法知道,它可读取的图片类型是有限制的,可以读取图片的格式为:[BMP, bmp, jpg, JPG, wbmp, jpeg, png, PNG, JPEG, WBMP, GIF, gif]
可是文件后缀是jpg格式,按道理说应该支持啊,后来将文件下载下来放到notepad++上查看才发现前缀是:RIFF? WEBPVP8 这说明该文件的实际格式是webp格式.文件后缀名有时候不是实际的文件格式.

最后解决方案

因为我的业务只支持特定格式的文件,在ImageIo支持读取的图片格式范围内,因此,当读取到null时,直接提示用户上传图片格式有误即可.

备注:
ImageIO.getReaderFileSuffixes() 返回值:[jpg, bmp, gif, png, wbmp, jpeg]
ImageIO.getReaderFileSuffixes() 返回值:[JPG, jpg, bmp, BMP, gif, GIF, WBMP, png, PNG, wbmp, jpeg, JPEG]


以上是关于ImageIO.read() 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 ImageIO.read(class.getResource(URL)) 加载图像,但 getResource 返回 null

使用 ImageIO.read 的问题

无法使用 ImageIO.read(文件文件)读取 JPEG 图像

Java压缩图片ImageIO.read()报错

ImageIO.read(getClass().getResource("imagepath")) 中 getclass() 的实际目的是啥 [重复]

使用 ImageIO.read() 生成的图像是不是仍使用传递给它的相同内存?