如何在indesign中以编程方式将CMYK转换为RGB

时间:2010-04-19 13:51:46

标签: java rgb adobe-indesign cmyk

我在indesign中有一个CMYK色彩空间,我想将其转换为RGB色彩空间,我有一些代码,但我得到的数据不正确。

我试过的一些代码在下面给出

    double cyan = 35.0;
    double magenta = 29.0;
    double yellow = 0.0;
    double black = 16.0;

    cyan = Math.min(255, cyan + black); //black is from K
    magenta = Math.min(255, magenta + black);
    yellow = Math.min(255, yellow + black);
    l_res[0] = 255 - cyan;
    l_res[1] = 255 - magenta;
    l_res[2] = 255 - yellow;

@Override
public float[] toRGB(float[] p_colorvalue) {
    float[] l_res = {0,0,0};
    if (p_colorvalue.length >= 4)
    {
        float l_black = (float)1.0 - p_colorvalue[3];
        l_res[0] = l_black * ((float)1.0 - p_colorvalue[0]);
        l_res[1] = l_black * ((float)1.0 - p_colorvalue[1]);
        l_res[2] = l_black * ((float)1.0 - p_colorvalue[2]);
    }
    return (l_res);
}

CMYK颜色空间中的值为C = 35,M = 29,Y = 0,K = 16,正确的RGB值为R = 142,G = 148,B = 186。

在adobe indesign中,使用色板我们可以将模式更改为CMYK或RGB。

但我想以编程方式进行,我可以使用任何算法将CMYK转换为RGB,这将提供正确的RGB值。

还有一个问题,如果RGB的alpha值是1,那么CMYK的alpha值是多少?

任何人都可以帮我解决这些问题......提前致谢。

5 个答案:

答案 0 :(得分:5)

回答你的上一个问题:

如果RGB颜色空间中的alpha为1,则在CMYK颜色空间中为1。两个空格都只是指定颜色,而不是透明度。

在您的CMYK到RGB转换问题上,您应该注意

  

CMYK和RGB模型之间没有确切的转换 - 两个颜色空间都覆盖不同的颜色gamuts

Source

还讨论了this Wikipedia page

答案 1 :(得分:2)

颜色是主观的。

将CMYK转换为RGB时,有直接的转换公式,因为您已经发现并且似乎有代码。然而,它们太精确了。

从CMYK转换为RGB时,您需要使用color profile来描述将放置CMYK墨水的设备和基材。

因此:

  1. 您有image.tif这是CMYK图片。
  2. 您需要应用描述该图像的预期输出设备的ICC配置文件。 (即USWebCoatedSWOP.icc用于使用涂布的基材在柔性版印刷机上产生的图像。)
  3. 按照这些步骤可以获得正确的彩色图像和“正确”的RGB值。

    因此,将这些知识应用于您的情况,您需要以编程方式应用ICC配置文件。

    如果你坚持自己做数学,(我建议你避免这种情况!!! )你可以在ICC website上阅读所有相关内容或者使用{{3 }}

    我不相信通过InDesign公开基于COM的编程接口。但是,Photoshop,Illustrator和Acrobat都会公开一些基于COM的API。

    我不知道使用Adobe公开的API调用是否可行,但我可以说LittleCMS

    编辑: 显然,it is possible to do this programmatically through CorelDRAW,我找不到任何以编程方式应用颜色配置文件的功能。见(1.5.9。颜色)部分。

答案 2 :(得分:2)

你所拥有的只是四个数字(对于CMYK),你想从中得到三个数字(对于RGB)。

不幸的是,您的数字只是 - 数字。要指定颜色,需要超过四倍或三倍。有多种方法可以做到这一点,但最广泛使用的是ICC架构(参见www.color.org),使用色彩空间,轮廓连接空间,渲染意图,照明条件等概念。非常简单的术语:您需要一个源配置文件来描述您来自的CMYK号码,以及您希望从四个数字中获得的RGB的目标配置文件。然后,您可以使用基于ICC的颜色转换技术(如开源LittleCMS库,或Mac OS,Windows OS或各种Adobe产品中内置的类似功能)来执行转换。

看起来你想要匹配其他地方发现的行为 - 除非你发现其他地方发现的“行为”正是在完成它的工作,否则很难找到一种精确匹配它的方法。不幸的是,很多这些“行为”基本上没有明确规定或记录不足。

如果你能详细说明你为什么做你做的事情的原因,那么可能会提出一些有用的建议。

答案 3 :(得分:0)

double cyan = 35.0/100.0;
double magenta = 29.0/100.0;
double yellow = 0.0;
double black = 16.0/100.0;

首先,您将每个值除以100,因为它需要在0到1的范围内 然后

        R=255*(1-cyan)*(1-black);
        G=255*(1-magneta)*(1-black);
        B=255*(1-yellow)*(1-black);

通过这种方式,我们将获得几乎近似的值

答案 4 :(得分:0)

如果使用InDesign脚本,为什么要自己转换颜色?只需让InDesign帮您完成。

app.colorTransform(源颜色空间,源颜色空间,目标颜色空间中的数字数组);

上面的代码将返回一个数字数组,这些数字代表目标颜色空间中的颜色。 Give this a try.