簡體   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