如何在Illustrator脚本中将CMYK转换为RGB?

时间:2015-06-18 11:11:18

标签: javascript adobe-indesign adobe-illustrator extendscript

我获取颜色的cmyk值并将其转换为RGB,此RGB颜色以html扩展名显示。但是颜色选择器显示RGB颜色的不同值,因为我们在颜色阴影中有所不同。我使用普通的java脚本方法将CMYK转换为RGB。

以下用于将CMYK转换为RGB的公式 -

CMYK到CMY

C = 1 - (R / 255)

M = 1 - (G / 255)

Y = 1 - (B / 255)

然后CMY TO RGB

R =(1 - C)* 255

G =(1 - M)* 255

B =(1 - Y)* 255

颜色选择器显示从正常功能计算出的不同颜色。

例如:颜色为红色。

一般

RGB:255,0,0

CMYK:0%,100%,100%,0%

HEXCODE:#FF0000

但是在插图画家双击颜色选择器时显示为

RGB:237,28,36

CMYK:0%,100%,100%,0%

HEXCODE:#ED1C24

那么,是否有任何方法或公式可以获得与颜色选择器计算的值相同的值。

请提前帮助,谢谢。

请找附件图片链接以供参考。

http://screencast.com/t/sYa1Y301Qa2

4 个答案:

答案 0 :(得分:1)

CMYK到RGB转换:

R,G,B值的范围为0-255。

红色(R)颜色由青色(C)和黑色(K)颜色计算:

R = 255 × (1-C) × (1-K)

绿色(G)由品红色(M)和黑色(K)颜色计算:

G = 255 × (1-M) × (1-K)

蓝色(B)由黄色(Y)和黑色(K)颜色计算:

B = 255 × (1-Y) × (1-K)

答案 1 :(得分:1)

RGB到CMYK没有简单或一般的转换公式。基本上,RGB是关于光学颜色的存在,而CMYK是关于墨颜色的存在。增加R,G和B时,颜色会变亮,而CMYK通常会相反。我认为这两篇文章可以帮助您深入理解它们:Adobe RGBColor space

问题在于,如果您想要像illustrator或photoshop这样的软件具有确切的值,则需要使用javascript中无法访问的ICC配置文件(请参阅此问题:Is there any client-side technology able to convert sRGB to CMYK through an ICC color profile?)。

然而,有一些数学转换,比如你做过,或者这个python version,它将CMYK转换为CMY然后转换为RGB(它们不是标准的ICC颜色):

C = C * (1.0 - K) + K
M = M * (1.0 - K) + K
Y = Y * (1.0 - K) + K

R = 255 * (1.0 - C)
G = 255 * (1.0 - M)
B = 255 * (1.0 - Y)

答案 2 :(得分:1)

在Illustrator脚本中,您可以在app.convertSampleColor()函数中使用。

此函数接收源和目标空间名称以及颜色值数组,并在目标空间中返回以插图画家精确转换的颜色数组。

答案 3 :(得分:-1)

请问我我的英语不好!!

我想出了自己的想法

问题在于CMYK青色会变成RGB的浅青色

并且CMYK PINK还返回RGB的实蓝

所以我添加了一些值:

IF CYAN > MAGENTA .. WE ADD 25% OF CYAN VALUE TO MAGENTA VALUE

ELSE IF CYAN < MAGENTA .. WE CUT 50% OF CYAN VALUE TO SHOW REAL-PINK

对我有用,这里是扩展代码:

function CMYKTORGB1(_c, _m, _y, _k) {
    var C = _c / 100;   // THE PROBLEM THAT IT RETURNS LIGHT-CYAN IN RGB
    var M = _m / 100;
    var Y = _y / 100;
    var K = _k / 100;
    var _mc = 0;

    if (_c > 0) {
        if (_m >= _c) {
            _mc = _c / 2;
            C = (_c - _mc) / 100;   // THIS WILL FIX BLUE-PINK VALUE
        }
        else {
            _mc = _c / 4;
            M = (_m + _mc) / 100;   // THIS WILL FIX LIGHT-CYAN VALUE
        }
    }

    var R = 255 * (1 - C) * (1 - K);
    var G = 255 * (1 - M) * (1 - K);
    var B = 255 * (1 - Y) * (1 - K);

    if (R < 0) { R = 0; }
    if (G < 0) { G = 0; }
    if (B < 0) { B = 0; }

    return [R, G, B];
}

或此功能也起作用:

function CMYKTORGB2(_c, _m, _y, _k) {
    var C = _c / 100;               // THE PROBLEM THAT IT RETURNS LIGHT-CYAN IN RGB
    var M = _m / 100;
    var Y = _y / 100;
    var K = _k / 100;
    var _mc = 0;

    if (_c > 0) {
        if (_m >= _c) {
            _mc = _c / 2;
            C = (_c - _mc) / 100;       // THIS WILL FIX BLUE-PINK VALUE
        }
        else {
            _mc = _c / 4;
            M = (_m + _mc) / 100;       // THIS WILL FIX LIGHT-CYAN VALUE
        }
    }

    var _C = C * (1.0 - K) + K
    var _M = M * (1.0 - K) + K
    var _Y = Y * (1.0 - K) + K

    var R = 255 * (1.0 - C)
    var G = 255 * (1.0 - M)
    var B = 255 * (1.0 - Y)

    if (R < 0) { R = 0; }
    if (G < 0) { G = 0; }
    if (B < 0) { B = 0; }

    return [R, G, B];
}