【发布时间】:2014-07-11 01:17:09
【问题描述】:
我有一个使用 ImageIO 将字节数组转换为 BufferedImage 的代码。
public void readImage(byte[] imageBytes) {
ByteArrayInputStream inputStream = new ByteArrayInputStream(imageBytes);
BufferedImage bufferedImage = null;
try {
bufferedImage = ImageIO.read(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
// do something with bufferedImage
}
但我发现对于某些 jpeg 图像,它每次都会抛出 CMMException。
这是堆栈跟踪:
java.awt.color.CMMException: Cannot get color transform
at sun.java2d.cmm.lcms.LCMS.createNativeTransform(Native Method)
at sun.java2d.cmm.lcms.LCMSTransform.<init>(LCMSTransform.java:103)
at sun.java2d.cmm.lcms.LCMS.createTransform(LCMS.java:75)
at java.awt.image.ColorConvertOp.filter(ColorConvertOp.java:552)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.acceptPixels(JPEGImageReader.java:1251)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readImage(Native Method)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:1219)
at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:1022)
at javax.imageio.ImageIO.read(ImageIO.java:1438)
at javax.imageio.ImageIO.read(ImageIO.java:1342)
这是造成麻烦的照片
我在 Google 上搜索了一个解决方案,发现了一个帖子,承认该问题并建议在 ImageIO 失败的情况下使用 JAI。但我有疑问,因为该帖子是 4 年前的,而且我似乎找不到关于 JAI 的太多信息,这让我相信这不是理想的解决方案。有没有其他方法可以在没有 ImageIO 或 JAI 的情况下将字节数组转换为缓冲图像?如果今天 JAI 仍然是一个可靠的解决方案,有人可以告诉我如何使用 JAI 来做到这一点吗?
提前致谢!
【问题讨论】:
-
该图像在上传或下载过程中可能发生了问题,但我的 Java(版本 1.7.0_51)读取该图像时没有错误。
-
@ScaryWombat 这无关。这是由损坏/非标准 ICC 配置文件引起的 JPEG 解码问题。
标签: java jpeg javax.imageio jai