使用ImageIO读取JCS_YCCK图像

时间:2009-07-28 21:04:13

标签: java image-processing jpeg

我正在使用ImageIO.read来处理上传的图片文件。代码类似于

BufferedImage bufferedImage = ImageIO.read(new ByteArrayInputStream(image.getContents()));

我设法解决了大部分问题,但是这个让我一无所知。上传的图片具有JCS_YCCK个人资料,如com.sun.imageio.plugins.jpeg.JPEG中所定义,com.sun.imageio.plugins.jpeg.JPEGImageReader不支持。这导致了一个很好的堆栈跟踪,类似于:

Caused by: javax.imageio.IIOException: Unsupported Image Type
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.readInternal(JPEGImageReader.java:910)
    at com.sun.imageio.plugins.jpeg.JPEGImageReader.read(JPEGImageReader.java:885)
    at javax.imageio.ImageIO.read(ImageIO.java:1422)
    at javax.imageio.ImageIO.read(ImageIO.java:1326)
    at com.example.ImageWriter.resizeEmbeddableImageInPlace(ImageWriter.java:231)

如何使用Java的ImageIO处理这种类型的JPEG?


更新:我已经尝试过Commons-Sanselan,答案表明,但不幸的是它不支持JPEG文件:

org.apache.sanselan.ImageReadException: Sanselan cannot read or write JPEG images.
    at org.apache.sanselan.formats.jpeg.JpegImageParser.getBufferedImage(JpegImageParser.java:90)
    at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1264)
    at org.apache.sanselan.Sanselan.getBufferedImage(Sanselan.java:1231)

2 个答案:

答案 0 :(得分:0)

一种可能的解决方案是使用Java Advanced Imaging Image IO扩展。正确安装后,转换即可开箱即用。

问题在于它与Maven的搭配不是很好,所以我问Using Java Advanced Imaging with Maven。如果成功,那么这个答案将被接受。

答案 1 :(得分:-1)

我不知道ImageIO,但您可以使用Commons Sanselan library,它提供了访问各种图像的简便方法。