【问题标题】:How can we convert CMYK to RGB in illustrator script?我们如何在 Illustrator 脚本中将 CMYK 转换为 RGB?
【发布时间】:2015-09-03 23:55:33
【问题描述】:

我获取颜色的 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 转 RGB

R = ( 1 - C ) * 255

G = ( 1 - M ) * 255

B = ( 1 - Y ) * 255

颜色选择器显示根据正常函数计算的不同颜色。

例如:颜色为红色。

一般

RGB : 255,0,0

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

十六进制代码:#FF0000

但在 illustrator 中双击颜色选择器会显示为

RGB : 237,28,36

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

十六进制代码:#ED1C24

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

请帮助,在此先感谢。

请找到附加的图片链接以供参考。

http://screencast.com/t/sYa1Y301Qa2

【问题讨论】:

  • CMYK需要使用ICCRGB

标签: javascript adobe-indesign adobe-illustrator extendscript


【解决方案1】:

请原谅我的英语不好!!

我想我想通了

问题是 CMYK 青色在 RGB 中恢复为浅青色

CMYK 粉红色也恢复为 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];
}

【讨论】:

  • 你的主要问题是你的大写锁定键
  • 这是一种手工制作的方法,产生的结果比用于 ExtendScript 的 convertSampleColor 函数要差得多。
【解决方案2】:

在 Illustrator 脚本中,您会在 app.convertSampleColor() 函数中找到用途。

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

【讨论】:

  • 而且命令app.executeMenuCommand('doc-color-rgb') 不会有任何伤害。
  • 这会毁掉某人的文件。 OP 询问如何在扩展程序中显示 AI 文档的 rgb 值,如果您将用户的文档转换为用户没有要求的完全不同的颜色空间。如果有人在打印中使用该扩展程序并且这样做并且他们保存了文档,那可能意味着彻底的灾难。
  • 好的。谢谢你的澄清。这实际上取决于脚本的目的。如果您不需要修改给定的文件,则不必保存它。但是,如果您想获得一个 rgb 文档,那么在保存之前更改其颜色空间是有意义的。后面的任务是我工作流程中更常见的事情。所以我决定分享这个命令。
【解决方案3】:

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)

【讨论】:

    【解决方案4】:

    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)

    【讨论】:

    • 感谢您的快速回复,但此公式与 illustrator 中颜色选择器提供的输出不匹配。
    猜你喜欢
    • 2020-07-03
    • 2011-03-25
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多