为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

饮歌长啸 2019-09-21 15:00:59
我在使用ImageIO.read(File file)读取此JPEG文件时遇到问题-它引发异常,并显示消息“不支持的图像类型”。我尝试了其他JPEG图像,但它们似乎工作正常。我能够发现的唯一区别是此文件似乎包含缩略图-已知会导致ImageIO.read()问题吗?
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞


您的图像“颜色模型”为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读取的图像CMYK


OP发生的问题是,它们有类似图像2的内容,当您尝试读取它时会抛出异常。


查看完整回答
反对 回复 2019-09-21
  • 3 回答
  • 0 关注
  • 5594 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信