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的内容,当您尝试读取它时会抛出异常。
添加回答
举报