close


來源: http://www.mjtd.com/bbs/dispbbs.asp?boardID=3&ID=65975&page=1

為了說明 adobe 的 RGB 轉換 CMYK 的過程,不得不先涉及到一些色彩轉換程序方面的東西。

CMYK_ADOBE_COLORSPACE:
r = (k*c)/maxval;
g = (k*m)/maxval;
b = (k*y)/maxval;

以上是 adobe 的 CMYK 到 RGB轉換公式,下面再來看看 RGB 如何 轉換為 CMYK

下面的語句是經過改寫的適用於 Flash 的 actionscript

 

// RGB to CMY 色彩轉換
function rgbtocmy () {
mycyan = 255 - myred;
mymagenta = 255 - mygreen;
myyellow = 255 - myblue;
correctCMYK();
}

// CMY to RGB 色彩轉換
function cmytorgb () {
myred = 255 - mycyan;
mygreen = 255 - mymagenta;
myblue = 255 - myyellow;
correctCMYK();
}

// CMYK 色彩修正
function correctCMYK () {
if (rep_v != "ERR") {
var temp = Math.min(Math.min(mycyan, mymagenta), myyellow);
if (temp != 0) {
temp2 = Math.round((rep_v / 100) * temp);
rep_k = Math.round((temp2 / 255) * 100);
rep_c = Math.round(((mycyan - temp2) / 255) * 100);
rep_m = Math.round(((mymagenta - temp2) / 255) * 100);
rep_y = Math.round(((myyellow - temp2) / 255) * 100);
} else {
rep_c = Math.round((mycyan / 255) * 100);
rep_m = Math.round((mymagenta / 255) * 100);
rep_y = Math.round((myyellow / 255) * 100);
rep_k = 0;
}
}
}

// RGB to CMY 色彩轉換
function rgbtocmy () {
mycyan = 255 - myred;
mymagenta = 255 - mygreen;
myyellow = 255 - myblue;
correctCMYK();
}

// CMY to RGB 色彩轉換
function cmytorgb () {
myred = 255 - mycyan;
mygreen = 255 - mymagenta;
myblue = 255 - myyellow;
correctCMYK();
}

// CMYK 色彩修正
function correctCMYK () {
if (rep_v != "ERR") {
var temp = Math.min(Math.min(mycyan, mymagenta), myyellow);
if (temp != 0) {
temp2 = Math.round((rep_v / 100) * temp);
rep_k = Math.round((temp2 / 255) * 100);
rep_c = Math.round(((mycyan - temp2) / 255) * 100);
rep_m = Math.round(((mymagenta - temp2) / 255) * 100);
rep_y = Math.round(((myyellow - temp2) / 255) * 100);
} else {
rep_c = Math.round((mycyan / 255) * 100);
rep_m = Math.round((mymagenta / 255) * 100);
rep_y = Math.round((myyellow / 255) * 100);
rep_k = 0;
}
}
}

// RGB to CMY 色彩轉換
function rgbtocmy () {
mycyan = 255 - myred;
mymagenta = 255 - mygreen;
myyellow = 255 - myblue;
correctCMYK();
}

// CMY to RGB 色彩轉換
function cmytorgb () {
myred = 255 - mycyan;
mygreen = 255 - mymagenta;
myblue = 255 - myyellow;
correctCMYK();
}

// CMYK 色彩修正
function correctCMYK () {
if (rep_v != "ERR") {
var temp = Math.min(Math.min(mycyan, mymagenta), myyellow);
if (temp != 0) {
temp2 = Math.round((rep_v / 100) * temp);
rep_k = Math.round((temp2 / 255) * 100);
rep_c = Math.round(((mycyan - temp2) / 255) * 100);
rep_m = Math.round(((mymagenta - temp2) / 255) * 100);
rep_y = Math.round(((myyellow - temp2) / 255) * 100);
} else {
rep_c = Math.round((mycyan / 255) * 100);
rep_m = Math.round((mymagenta / 255) * 100);
rep_y = Math.round((myyellow / 255) * 100);
rep_k = 0;
}
}
}

我們知道, RGB 和 CMYK 並不能一一對應,這裡面存在的問題是黑色部分的替換值的取值問題。

但是, RGB 所可以全部對應的,是CMY 格式,其最取值範圍是0-255。從色輪上我們可以很容易的瞭解到這其中的補色計算關係。因此,CMY 和 RGB 的對換 可以說是「無損,可逆轉」的。

當從RGB 得到相應的CMY 之後,我們若要得到 CMYK 值,就必須定義一個「黑色替換值」,也就是說提取各色通道中的若幹成分來形成黑色通道。CMYK 的取值是 0-100。

這個「黑色替換值」的取值不同,得到的CMYK份量分佈也就不同。也就是我們在photoshop裡面可以選擇 CMYK 的分色方案為 「UCR」或者「GCR」的不同。

「黑色替換值」越大,CMYK圖像在印刷時的偏色幾率就越小,但相應的狀況是圖片彩墨份量在暗黑部位顯薄,不夠飽和。這種分色方式適用於印刷材質較薄或較粗糙,印刷精度不高的場合。

附註:為什麼直接去色和直接轉換灰度比 Lab 的 L 通道得到的灰度層次顯得差?

我們還是來用色彩轉換公式說話來比較:
L = 0.3R+0.59G+0.11B
Gray = (R+G+B)/3

我們很容易就看出區別,平均取值的灰度和根據色彩明度增益比例混合的值是完全不同的。


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 jthwax 的頭像
    jthwax

    JTHWAX 部落格

    jthwax 發表在 痞客邦 留言(0) 人氣()