Java ImageIO IIOException : Unsupported image type?

标签 java image exception javax.imageio

第一次在 Java 中使用图像,并且遇到了一些没有很好记录的奇怪异常。这是失败的代码行:

BufferedImage imgSelected = ImageIO.read(new File("/abs/url/to/file/image.jpg"));

这行抛出了一个带有不支持的图像类型的 IIOException 作为异常消息。我已经检查并重新检查实际上是这一行引发了异常,File 对象有效,URL 有效,并且 image.jpg 实际上是有效的 JPG在其他图像查看器中加载非常好。

如何获得有关此异常性质的更多信息?这是在 Java 7 中加载图像的传统方式,还是一种旧的/过时的方法?关于这些“不支持的图像类型”异常的信息并不多,而且 ImageIO 肯定支持 JPG!

感谢您的帮助!

最佳答案

尝试检查 JPEG 的编码。例如,ImageIO 无法读取 CMYK 编码的 jpeg 图像。 AFAIK,ImageIO 多年未更新,因此您想尝试使用官方替代/扩展:JAI ImageIO

不幸的是,JAI ImageIO 需要在 JRE 中安装一些 native 库,这可能是不需要的。 我们执行以下操作:

  • 使用 Apache Sanselan 检测是否为 JPEG
  • 由于 Sanselan 无法读写 JPEG,所以使用普通的旧 AWT JPEGCodec:JPEGCodec.createJPEGDecoder(...)
  • 要将 CMYK 转换为 RGB,然后我们获取读取的 BufferedImage 的光栅并手动转换(您可以使用 ICC 配置文件,但手动转换符合我们的需要)

这是我的一个问题,原因是 ImageIO 不支持所有类型的 JPEG 图像,我在那里陈述了我对您收到该消息的原因的更多发现:Pure Java alternative to JAI ImageIO for detecting CMYK images

关于Java ImageIO IIOException : Unsupported image type?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7177655/

相关文章:

java - 带有 RequestQue 的 while 循环中的 Thread.sleep ()

java - 将 JPanel 转换为 JScrollPane 中的图像

Java - 检测 `finally` block 期间是否有异常发生

c++ - 有不同的异常类

java - 嵌套运行时异常 : Cannot parse POST parameters of request

java - 为什么我从 gif 文件转换的 jpg 文件不清晰?

java - 如何在java中暂停预先实现的Runnable类?

java - servlet 可以打开套接字与 native 代码对话吗?

CSS:如果大于窗口,则缩小背景图像,否则保持 100%

python - 为什么openCV存储的文件比原始文件大(kB)?