Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中如何将RGB图像转换为CMYK,反之亦然?_Java_Rgb_Java 2d_Bufferedimage_Cmyk - Fatal编程技术网

在Java中如何将RGB图像转换为CMYK,反之亦然?

在Java中如何将RGB图像转换为CMYK,反之亦然?,java,rgb,java-2d,bufferedimage,cmyk,Java,Rgb,Java 2d,Bufferedimage,Cmyk,我们的web应用程序允许用户下载不同格式(bmp、png和jpeg)的动态生成图像。我们的一些用户下载图像进行打印,因此我们希望允许他们在RGB或CMYK之间进行选择。 在创建渲染图像/缓冲图像时,是否有方法指定颜色模型?如果不是,默认的颜色模型是什么?如何将其更改为其他颜色模型? 欢迎使用代码片段:) 谢谢 Olivier.建议使用RGB()中的-请参阅 示例代码: java.awt.color.ColorSpace ColorSpace cmyk = new ColorSpace(Colo

我们的web应用程序允许用户下载不同格式(bmp、png和jpeg)的动态生成图像。我们的一些用户下载图像进行打印,因此我们希望允许他们在RGB或CMYK之间进行选择。 在创建渲染图像/缓冲图像时,是否有方法指定颜色模型?如果不是,默认的颜色模型是什么?如何将其更改为其他颜色模型? 欢迎使用代码片段:)

谢谢


Olivier.

建议使用RGB()中的
-请参阅

示例代码:

java.awt.color.ColorSpace

ColorSpace cmyk = new ColorSpace(ColorSpace.TYPE_CMYK, 4);
float[] values = cmyk.fromRGB(rgbFloatArray);
公共抽象浮点[]来自RGB(浮点[]RGB值)

将假定位于默认CS_sRGB颜色空间中的颜色值转换为此颜色空间


该方法使用设计用于在输入和输出颜色之间产生最佳感知匹配的算法来转换颜色值。要进行颜色值的色度转换,应使用CS_sRGB颜色空间的toCIEXYZ方法首先将输入颜色空间转换为CS_CIEXYZ颜色空间,然后使用此颜色空间的fromCIEXYZ方法将CS_CIEXYZ转换为输出颜色空间。有关更多信息,请参阅toCIEXYZ和fromCIEXYZ

某些图像格式不允许使用CMYK颜色空间(PNG、JPEG/JFIF、GIF…),对于普通用户,最好使用RGB打印


您需要向客户提供CMYK图像的原因是什么?

要通过Java将RGB图像转换为CMYK图像,最简单的方法之一是使用JAI(Java高级图像)

下载JAI:

下载JAI ImageIO:

代码如下:

public static void rgbToCmyk() throws IOException{

    BufferedImage rgbImage = ImageIO.read(new File("C://Users//Public//Pictures//Sample Pictures//RGB_IMAGE.jpg"));
    BufferedImage cmykImage = null;
    ColorSpace cpace = new ICC_ColorSpace(ICC_Profile.getInstance(RbgToCmyk.class.getClassLoader().getResourceAsStream("ISOcoated.icc")));
    ColorConvertOp op = new ColorConvertOp(rgbImage.getColorModel().getColorSpace(), cpace, null);       
    cmykImage = op.filter(rgbImage, null);

    JAI.create("filestore", cmykImage, "c:/tmp/CMYK_IMAGE.TIF", "TIFF");
}

注意:“ISOcoated.icc”是我的icc配置文件。您可以从打印机或其他地方获取图像。

您的用户无法打印RGB图像的原因是什么?可能是重复的“否”,您不能这样做。ColorSpace是一个抽象类!哦,好极了。在这种情况下,我建议使用这个线程中的一些示例和代码:Mark,在我研究了JAI API中的gazillion类之后,这个线程实际上对我帮助很大。我的代码正在运行,需要一些清理,完成后我会发布它。谢谢。太棒了,很高兴我贴的东西最终帮了我;)您可以使用获取CMYK颜色空间的实例,然后使用它转换图像对象的像素数据。加载颜色配置文件似乎是更好的解决方案,因为我使用了一个表示CMYK颜色空间的类,但结果图像的颜色“错误”,而当我加载CMYK配置文件时,结果图像的颜色与原始图像相当。