CMYK 轉 RGB 公式會反轉每一個顏色油墨、將結果乘以 (1 - K),並依據 W3C device-cmyk 簡易後備方式縮放至 0-255 的顯示範圍。對於任何青、洋紅、黃和黑色百分比,紅、綠、藍色通道的計算方式為 R = 255 × (1 - C) × (1 - K)、G = 255 × (1 - M) × (1 - K),以及 B = 255 × (1 - Y) × (1 - K),其中 C、M、Y 和 K 會正規化為 0-1。相同的公式在 W3C CSS Color 4 規範中以更嚴謹的形式出現:1 - min(1, colorInk × (1 - black) + black),縮放至 255,並採用半偶數捨入。這兩個表示式在 0 到 1 之間的任何輸入下數學上都相同;min() 的限制僅在傳入超出該範圍的值時才會起作用。這就是 CMYK 轉 RGB 工具所實作的公式,因此你可以移動滑桿、即時觀看數學運算更新,並確認你已有任何色組的結果。
任何曾經把印刷廠色票本上的 CMYK 色組貼到網站模型中的人,都遇過相同的落差:印刷使用紙張上的減法油墨混色,而螢幕使用加法光線混色,兩者之間的橋樑很少是一個單一的數字。簡易公式是 W3C 工作小組在不將 ICC 規範拖入瀏覽器的情況下,能夠發布的最接近的一行近似值,這也是它在 CSS 中被視為預設後備的原因。這也說明了為何這個公式被廣泛複製:它簡短、具決定性,且對於介面模型、調色盤比較,以及對印刷色塊進行快速螢幕檢查來說已經足夠。

CMYK 轉 RGB 公式:逐個分量解析
CMYK 是一種減法模型:每種油墨會吸收一部分從紙張反射的光線,因此油墨越多,通常到達眼睛的光線就越少。RGB 是加法模型:每個通道都會增加光線,因此數值越高代表亮度越高。簡易公式透過反轉每個油墨百分比(從 1 減去)來處理這個翻轉,然後將結果與黑色通道相乘結合。乘以 (1 - K) 是區分真正的 CMYK 色組與簡單 CMY 反轉的關鍵步驟。
以下是為每個通道展開的公式:
- R = 255 × (1 - C) × (1 - K)
- G = 255 × (1 - M) × (1 - K)
- B = 255 × (1 - Y) × (1 - K)
其中 C、M、Y 和 K 分別為百分比除以 100,因此落在 0 到 1 的範圍內。加入黑色油墨時,(1 - K) 因子會同時調暗所有通道,這符合印刷機將關鍵色(黑色)疊加在彩色油墨之上,而非讓它們堆疊成混濁棕色的方式。在計算出三個實數後,將每個數值四捨五入為 0 到 255 之間的整數。W3C 參考實作採用半偶數捨入(也稱為銀行家捨入),因此剛好落在 0.5 的數值會捨入到最近的偶數鄰居,而不是一律進位。
W3C 規範中的嚴謹形式將相同表示式改寫為 1 - min(1, colorInk × (1 - K) + K),然後乘以 255。展開 min() 內部的括號:colorInk × (1 - K) + K = colorInk − colorInk·K + K。一減去該表示式可化簡為 (1 - K)(1 - colorInk),這與較簡單形式中使用的乘積相同。min() 僅用於防範超出 0 到 1 範圍的輸入,因此對於任何合理的 CMYK 色組,你可以使用任何較容易輸入的形式。
如何將公式應用於任何 CMYK 色組
按照工具在每次滑桿變動時執行的相同六個步驟,可以得到你可以手動驗證的可重現結果。
- 將四個百分比正規化。將青、洋紅、黃和黑色分別除以 100,使每個數值落在 0 到 1 的範圍內。
- 計算 (1 - K)。從 1 減去正規化後的黑色;這個單一因子將在每個通道重複使用。
- 計算每種油墨的剩餘反射率,取 (1 - C)、(1 - M) 和 (1 - Y)。
- 將每個剩餘反射率乘以 (1 - K),得到 R、G 和 B 在 0 到 1 的數值。
- 將每個數值縮放至 0–255,乘以 255 並使用半偶數規則四捨五入到最近的整數。
- 序列化為十六進位。將每個 8 位元通道寫成兩位數的十六進位配對,例如 RGB(204, 51, 102) 變成 #CC3366。
如果你寧願跳過算術運算,只想查看特定色組的結果,CMYK 轉 RGB 工具在你每次移動滑桿時都會執行這些相同的六個步驟,並讓你直接將十六進位輸出複製到樣式表中,無需離開頁面。
運算範例:從印刷百分比到 RGB
以一個由滿洋紅和滿黃組成,並加入 50% 黑色增加深度的品牌紅色為例:C = 0%、M = 100%、Y = 100%、K = 50%。正規化:C = 0,M = 1,Y = 1,K = 0.5。將數值代入公式:
- R = 255 × (1 - 0) × (1 - 0.5) = 255 × 1 × 0.5 = 127.5 → 128
- G = 255 × (1 - 1) × (1 - 0.5) = 255 × 0 × 0.5 = 0
- B = 255 × (1 - 1) © (1 - 0.5) = 255 × 0 × 0.5 = 0
結果是 RGB(128, 0, 0),一種深沉、略帶暗啞的紅色,在螢幕上顯示為 #800000。注意 50% 的黑色通道如何將鮮紅色拉低到原本亮度的一半,卻未改變色相:綠色和藍色通道保持在 0,因為滿洋紅和滿黃仍然會將它們抵消。若改設 K = 0,相同色組會產生 RGB(255, 0, 0),即純螢幕紅色——這是 W3C 規範在簡易後備中指出的端點行為。設 K = 100,相同輸入則塌縮為 RGB(0, 0, 0),即螢幕黑色端點。
你可以驗證的參考端點
在信任任何轉換之前,將這些眾所周知的色組代入公式。它們應該總是產生下表所示的數值,因為公式具決定性且輸入位於邊界。
| CMYK 色組 | 預期 RGB | 十六進位 | 測試內容 |
|---|---|---|---|
| 0%, 0%, 0%, 0% | 255, 255, 255 | #FFFFFF | 無油墨產生紙張白。 |
| 0%, 0%, 0%, 100% | 0, 0, 0 | #000000 | 滿關鍵黑色產生螢幕黑。 |
| 0%, 100%, 100%, 0% | 255, 0, 0 | #FF0000 | 滿洋紅加滿黃等於紅色。 |
| 100%, 0%, 0%, 0% | 0, 255, 255 | #00FFFF | 滿青等於螢幕青色。 |
| 100%, 100%, 0%, 0% | 0, 0, 255 | #0000FF | 滿青加洋紅等於藍色。 |
| 0%, 100%, 0%, 0% | 255, 0, 255 | #FF00FF | 滿洋紅等於螢幕洋紅。 |
如果你正在測試的轉換器中,這些端點有任何一個不符,就代表該公式不是 W3C 簡易後備。CMYK 轉 RGB 工具符合全部六個,這在與其他悄悄替換不同模型的線上轉換器比較時,是個有用的健全性檢查。線上發布的幾個常見 JavaScript 程式碼片段使用了略有不同的表示式,會破壞其中一個或多個端點;執行上表是最快能發現這一點的方法。
為何這個公式只是近似值
簡易公式將 CMYK 視為 RGB 的簡單代數轉換,但實際上並非如此。真實的 CMYK 輸出是裝置相依的:相同的百分比在使用一套油墨印刷的銅版紙上,與使用另一套油墨印刷的非銅版紙上,看起來可能不同。網點擴大,即半色調網點在印刷機上物理性變大的現象,可能會使中間調變暗十個百分點或更多。渲染意圖——感知、相對彩色、絕對彩色或飽和值,會改變哪些超出範圍的色彩被裁切以及如何裁切。而所有變數中最重要的是描述實際印刷機的內嵌 ICC 規範,簡易後備永遠不會讀取它。
根據 W3C CSS Color 4 device-cmyk 規範,該公式明確是針對沒有規範可用情況的後備方式。對於無法安全載入印刷機規範的瀏覽器來說,它是正確的選擇;但對於任何印刷色塊必須在嚴格容差內符合螢幕色彩的任務來說,它則是錯誤的選擇。支援規範的軟體(例如 Adobe Acrobat)透過來源規範和目標規範來對應每個色彩,以在 CMYK 和 RGB 之間轉換,這就是為何相同的 CMYK 色組在 Photoshop、Illustrator 或印刷廠的 RIP 中可能產生明顯不同的 RGB 數值。
何時使用瀏覽器工具與支援規範的軟體
對於介面模型、調色盤比較、無障礙對比檢查,或任何螢幕相關的交付物,簡易公式已經綽綽有餘。在 CMYK 轉 RGB 頁面上將四個滑桿移動到你的色組,讀取十六進位代碼,然後貼到你的樣式表中。計算在瀏覽器本地執行,因此沒有色彩數值會離開機器,結果對於「這在螢幕上看起來如何」、且印刷準確度不在考慮範圍內的問題已經足夠好。
對於印刷打樣、包裝模型、品牌色彩再現,或任何印刷色塊必須符合螢幕預覽的交付物,請勿依賴簡易公式。保留原始 CMYK 色組,向印刷廠索取正確的輸出規範,並透過經過校準的顯示器和實體打樣,以支援規範的軟體執行轉換。簡易結果足以讓你進行快速的螢幕檢查,而這正是它被設計用於的場景。將兩者混用——對螢幕模型使用支援規範的轉換,或對印刷核准使用簡易公式——是實際專案中最常見的色彩不符來源,而上方的端點表則是快速發現工具是否悄悄偏離已發布公式的方法。
如需更深入的探討,請參閱 調色器十六進位混色背後的數學。
如需更深入的探討,請參閱 在 Mac 上將 RGB 轉換為 CMYK:在瀏覽器中轉換。