ImageIO.read(File file) 报异常“Unsupported Image Type“,不支持CMYK格式图片问题解析和解决方式

ImageIO.read(File file)报异常"Unsupported Image Type",是因为其内部读取文件的类JPEGImageReader只能读取RGB color model,而你的图片可能被ps过,color model是CMYK。
如果你坚持要读取CMYK图片,你需要转换图片,使用一下代码。

        BufferedImage bufferedImage = null;
        try {
            bufferedImage = ImageIO.read(imageFile.getInputStream());
        } catch (final IOException e) {
            if ("Unsupported Image Type".equals(e.getMessage())) {
                // Find a suitable ImageReader
                final 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)
                final ImageInputStream input = ImageIO
                        .createImageInputStream(imageFile.getInputStream());
                reader.setInput(input);
                // Read the image raster
                final Raster raster = reader.readRaster(0, null);
                // Create a new RGB image
                final BufferedImage bi = new BufferedImage(raster.getWidth(),
                        raster.getHeight(), BufferedImage.TYPE_4BYTE_ABGR);
                // Fill the new image with the old raster
                bi.getRaster().setRect(raster);
                bufferedImage = bi;
            }
        }
        final int width = bufferedImage.getWidth();
        final int height = bufferedImage.getHeight();

 

你可能感兴趣的:(开发经验,解决方案,ImageIO,CMYK图片,RGB图片,BufferedImage)