第一次使用 Java 处理图像,遇到了一些没有很好记录的奇怪异常。这是失败的代码行:
BufferedImage imgSelected = ImageIO.read(new File("/abs/url/to/file/image.jpg"));
此行抛出一个带有 Unsupported image type 作为异常消息的 IIOException。我检查并重新检查实际上是这一行抛出异常,File 对象有效,URL 有效,并且 image.jpg
实际上是一个有效的 JPG,可以完美加载在其他图像查看器中很好。
我该怎么做才能获得有关此异常性质的更多信息?这是在 Java 7 中加载图像的传统方式,还是一种旧的/弃用的方法?关于这些“不支持的图像类型”异常的信息并不多,当然,ImageIO 支持 JPG!
谢谢你的帮助!
原文由 IAmYourFaja 发布,翻译遵循 CC BY-SA 4.0 许可协议
尝试检查 JPEG 的编码。
ImageIO
例如无法读取 CMYK 编码的 jpeg 图像。 AFAIK,ImageIO 多年未更新,因此您想尝试使用官方替代/扩展: JAI ImageIO 。不幸的是,JAI ImageIO 需要将一些本机库安装到 JRE 中,这可能是不需要的。我们执行以下操作:
JPEGCodec
:JPEGCodec.createJPEGDecoder(...)
BufferedImage
并手动转换它(你可以使用ICC配置文件,但手动转换符合我们的需要)这是我的一个问题,是由于
ImageIO
不支持所有类型的 JPEG 图像这一事实导致的,我在那里陈述了一些关于为什么你会收到该消息的发现: Pure Java alternative to JAI用于检测 CMYK 图像的 ImageIO