Как программно конвертировать CMYK в RGB в indesign - PullRequest
1 голос
/ 19 апреля 2010

У меня есть цветовое пространство CMYK в indesign, я хочу преобразовать его в цветовое пространство 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);
}

Значения: C = 35, M = 29, Y = 0, K = 16 в цветовом пространстве CMYK, а правильные значения RGB: R = 142, G = 148, B = 186.

В Adobe Indesign, используя образцы, мы можем изменить режим на CMYK или RGB.

Но я хочу сделать это программно. Могу ли я получить какой-либо алгоритм для преобразования CMYK в RGB, который даст правильные значения RGB.

И еще один вопрос: если альфа-значение для RGB равно 1, то каким будет альфа-значение для CMYK?

Может кто-нибудь помочь мне решить эти проблемы ... Заранее спасибо.

Ответы [ 5 ]

5 голосов
/ 19 апреля 2010

Чтобы ответить на ваш последний вопрос:

Если альфа равна 1 в цветовом пространстве RGB, то будет 1 в цветовом пространстве CMYK до. В обоих местах указаны только цвета, а не прозрачность.

Если у вас проблема с преобразованием CMYK в RGB, обратите внимание, что

Точного преобразования между моделями CMYK и RGB нет - оба цветовых пространства охватывают разные цвета гаммы

Источник

Существует также обсуждение этой страницы Википедии

2 голосов
/ 25 июня 2012

У вас есть только четыре числа (для CMYK), и вы хотите получить три числа из этого (для RGB).

К сожалению, ваши цифры - это просто цифры. Чтобы указать цвет, требуется больше, чем четверка или тройка. Есть несколько способов, как это можно сделать, но наиболее широко используемый связан с архитектурой ICC (см. Www.color.org), используя такие понятия, как цветовое пространство, пространство подключения профиля, намерения рендеринга, условия освещения и т. Д. очень просто: вам нужен исходный профиль для описания номеров CMYK, с которых вы приходите, и профиль назначения для RGB, который вы хотите получить из своих четырех номеров. Затем вы можете использовать технологию преобразования цветов на основе ICC (например, библиотеку LittleCMS с открытым исходным кодом или аналогичные функции, встроенные в Mac OS, Windows OS или различные продукты Adobe) для выполнения преобразования.

Похоже, что вы хотите сопоставить поведение, найденное в другом месте - если вы не выясните достаточно, как это "поведение, найденное в другом месте", точно выполняет свою работу, будет очень трудно найти подход, который точно соответствует ему. К сожалению, многие из этих «поведений» существенно недооценены или недокументированы.

Если вы сможете уточнить причины, по которым вы делаете то, что делаете, возможно, можно было бы предложить более полезные советы.

2 голосов
/ 19 апреля 2010

Цвет субъективен.

При преобразовании CMYK в RGB существуют формулы прямого преобразования, как вы выяснили и, похоже, имеете код для. Они, однако, слишком точны.

При преобразовании из CMYK в RGB необходимо использовать color profile, в котором описывается устройство и подложка, на которые будут наноситься чернила CMYK.

Таким образом:

  1. У вас есть image.tif, который является изображением CMYK.
  2. Вам необходимо применить профиль ICC, описывающий предполагаемое устройство вывода для этого изображения. (т. е. USWebCoatedSWOP.icc для изображения, создаваемого на флексографской печатной машине с использованием подложки с покрытием.)

Следуя этим шагам, вы получите правильное цветное изображение и «правильные» значения RGB.

Таким образом, применяя эти знания к вашей ситуации, вам необходимо программно применить профиль ICC.

Если вы настаиваете на том, чтобы делать математику самостоятельно, ( Я рекомендую вам избегать этого !!! ), вы можете прочитать все об этом на веб-сайте ICC или написать что-нибудь самостоятельно, используя LittleCMS .

Я не верю, что интерфейс программирования на основе COM доступен через InDesign. Однако Photoshop, Illustrator и Acrobat предоставляют некоторые API на основе COM.

Я не знаю, возможно ли это с помощью открытых вызовов API от Adobe, однако могу сказать, что это можно сделать программно через CorelDRAW .

Edit: По-видимому, InDesign имеет возможность автоматизации , однако я не смог найти никаких функций для программного применения цветовых профилей. Смотрите раздел (1.5.9. Цвет).

0 голосов
/ 03 июля 2018

Если вы используете скрипты InDesign, почему вы хотите конвертировать цвета самостоятельно? Просто попросите InDesign сделать это за вас.

app.colorTransform (массив чисел в исходном цветовом пространстве, исходном цветовом пространстве, целевом цветовом пространстве);

Приведенный выше код вернет массив чисел, представляющих цвет в цветовом пространстве назначения. Give this a try.

0 голосов
/ 09 января 2015
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);

Таким образом, мы получим почти приблизительные значения

...