Java CMYK图片转RGB图片

来源:互联网 发布:农产品成本调查数据库 编辑:程序博客网 时间:2024/05/16 01:03

上传做完了交由测试的时候,反馈说上传失败,自己试了试,都是成功的,于是叫测试人员把图片发给我看看。刚开始以为是图片太大了(2.9M,其实也没多大),我后来用一个3M的图片上传都上传成功了,仔细对比了图片的信息,发现失败的那张是CMYK的颜色样式,就想着转成RGB就完事了:

public class ReadJPEGRaster extends JFrame {static String file = "C:\\Users\\ZhangAo\\Desktop\\example-cmyk.jpg";public static void main(String[] args) throws Throwable {// 找一个readerIterator readers = ImageIO.getImageReadersByFormatName("JPEG");ImageReader reader = null;while (readers.hasNext()) {reader = (ImageReader) readers.next();if (reader.canReadRaster()) {break;}}// 设置input.ImageInputStream input = ImageIO.createImageInputStream(new File(file));reader.setInput(input);// 创建图片.BufferedImage image;try {// 尝试读取图片 (包括颜色的转换).image = reader.read(0);} catch (IIOException e) {// 读取Raster (没有颜色的转换).Raster raster = reader.readRaster(0, null);// 随意选择一个BufferedImage类型.int imageType;switch (raster.getNumBands()) {case 1:imageType = BufferedImage.TYPE_BYTE_GRAY;break;case 3:imageType = BufferedImage.TYPE_3BYTE_BGR;break;case 4:imageType = BufferedImage.TYPE_4BYTE_ABGR;break;default:throw new UnsupportedOperationException();}// 创建一个BufferedImage.image = new BufferedImage(raster.getWidth(), raster.getHeight(), imageType);// 设置图片数据.image.getRaster().setRect(raster);}// 显示图片.new ReadJPEGRaster(image);}ReadJPEGRaster(RenderedImage image) {super();getContentPane().add(new com.sun.media.jai.widget.DisplayJAI(image));pack();show();}}

可惜无法做到无损转换...用ImageMagick的命令行工具倒是可以无损转换,还有据说使用了JNI的jmagick也可以.但是没有权限在服务器上安装..

如果哪位知道其他CMYK无损转RGB的方法(不需要安装其他工具),还请告知..Thank you in advance!