繁体   English   中英

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

[英]How to convert CMYK to RGB programmatically in indesign

我在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值将是多少?

谁能帮助我解决这些问题...预先感谢。

要回答您的最后一个问题:

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

关于从CMYK到RGB的转换问题,您应注意

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

资源

Wikipedia页面上也有讨论

您只有四个数字(对于CMYK),而您想从中得出三个数字(对于RGB)。

不幸的是,您的电话号码就是数字。 要指定颜色,需要四倍或三倍以上。 有许多方法可以做到这一点,但是使用颜色空间,配置文件连接空间,渲染意图,照明条件等概念的方式,最广泛使用的方法是与ICC架构相关联(请参见www.color.org)。非常简单的术语:您需要一个源配置文件来表征您来自的CMYK数字,并需要一个您希望从这四个数字中得出的RGB的目标配置文件。 然后,您可以使用基于ICC的颜色转换技术(例如开源LittleCMS库或Mac OS,Windows OS或各种Adobe产品中内置的类似功能)进行转换。

看来您想匹配其他地方找到的行为-除非您足够了解“其他地方找到的行为”是如何工作的,否则很难找到一种与之完全匹配的方法。 不幸的是,这些“行为”中的许多行为基本上都未充分指定或未充分记录。

如果您能详细说明为什么要做自己的事情,那么可能会提出一些有用的建议。

颜色是主观的。

将CMYK转换为RGB时,有直接转换公式,如您所发现的,似乎有其代码。 但是,它们太精确了。

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

因此:

  1. 您有image.tif ,它是CMYK图像。
  2. 您需要应用ICC配置文件来描述该图像的预期输出设备。 (即, USWebCoatedSWOP.icc用于使用带涂层的基材在柔版印刷机上创建图像。)

执行以下步骤将为您提供正确的彩色图像和“正确的” RGB值。

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

如果您坚持自己进行数学运算( 我建议您避免这样做!! ),您可以在ICC网站上阅读所有相关内容,或者使用LittleCMS自己编写一些代码。

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

我不知道使用Adobe的公开API调用是否可行,但是,我可以说可以通过CorelDRAW以编程方式进行此操作

编辑:显然, InDesign确实具有自动化功能 ,但是,我找不到以编程方式应用颜色配置文件的任何功能。 请参见(1.5.9。颜色)部分。

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);

这样,我们将获得近似值

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

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

上面的代码将返回一个数字数组,这些数字代表目标颜色空间中的颜色。 试试看。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM