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

我在使用ImageIO.read(File file)读取此JPEG文件时遇到问题-它引发异常,并显示消息“不支持的图像类型”。

我尝试了其他JPEG图像,但它们似乎工作正常。

我能够发现的唯一区别是此文件似乎包含缩略图-已知会导致ImageIO.read()问题吗?


饮歌长啸
浏览 5609回答 3
3回答

潇湘沐

您的图像“颜色模型”为CMYK JPEGImageReader(读取文件的内部类)仅读取RGB颜色模型。如果您坚持要读取CMYK图像,则需要将其转换,请尝试以下代码。UPDATE将CMYK图像读取到RGB BufferedImage中。    File f = new File("/path/imagefile.jpg");    //Find a suitable ImageReader    Iterator readers = ImageIO.getImageReadersByFormatName("JPEG");    ImageReader reader = null;    while(readers.hasNext()) {        reader = (ImageReader)readers.next();        if(reader.canReadRaster()) {            break;        }    }    //Stream the image file (the original CMYK image)    ImageInputStream input =   ImageIO.createImageInputStream(f);     reader.setInput(input);     //Read the image raster    Raster raster = reader.readRaster(0, null);     //Create a new RGB image    BufferedImage bi = new BufferedImage(raster.getWidth(), raster.getHeight(),     BufferedImage.TYPE_4BYTE_ABGR);     //Fill the new image with the old raster    bi.getRaster().setRect(raster);更新-2015年3月-添加仿真图像原始图像已从OP的保管箱中删除。因此,我要添加新的图像(而不是原始图像)来模拟它们所发生的问题。第一幅图像是普通RGB图像的外观。图像RGB第二张图像是同一图像在CMYK颜色模型中的外观。您实际上看不到它在网络上的外观,因为它将由主机转换为RGB。要确切查看其外观,请拍摄RGB图像,然后通过RGB到CMYK转换器运行它。第三个图像是使用Java ImageIO读取然后写入时CMYK图像的外观。通过Java RGB读取的图像CMYKOP发生的问题是,它们有类似图像2的内容,当您尝试读取它时会抛出异常。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java