2014-03-12 49 views
3

是否有CMY colour功能在任何R包中相當於rgb()? {base}或例如{}色彩空間。我有一個自定義函數,我可以在這裏發佈,但本地人會更可取。R中的CMY顏色功能

+0

'library(sos); findFn(「cmyk」)'找不到任何有用的東西,所以它可能不存在。奇怪。 –

+0

如果有任何幫助,我寫了一個函數'XYZ2lab'。我知道這不是你要求的顏色空間,但是讓我知道,我會通過電子郵件發送或張貼它作爲答案。 –

回答

3

這應該工作

#' assumes integer input for CMYK 
cmyk <- function(C,M,Y,K) { 

    C <- C/100.0 
    M <- M/100.0 
    Y <- Y/100.0 
    K <- K/100.0 

    n.c <- (C * (1-K) + K) 
    n.m <- (M * (1-K) + K) 
    n.y <- (Y * (1-K) + K) 

    r.col <- ceiling(255 * (1-n.c)) 
    g.col <- ceiling(255 * (1-n.m)) 
    b.col <- ceiling(255 * (1-n.y)) 

    return(col2rgb(sprintf("#%02s%02s%02s", 
        as.hexmode(r.col), 
        as.hexmode(g.col), 
        as.hexmode(b.col)))) 

} 

> cmyk(0,50,85,0) 
     [,1] 
red 255 
green 128 
blue 39 

> cmyk(0,0,100,0) 
     [,1] 
red 255 
green 255 
blue  0 
+0

,或者您可以輕敲除法並指定十進制格式的CMYK百分比。還有一些其他的優化可以完成,但它完成了工作:-) – hrbrmstr

0

是的,有一種使用CMYK顏色代替RGB進行打印的方法。如果將colormodel設置爲CMYK,則可以使用CMYK顏色。

仔細閱讀本link和細節的例子here

+0

是的,我看到了那個頁面。但除非我錯過了一些東西,它只是指定輸出文件的色彩空間。它不是R中用於將變量映射到青色,品紅色或黃色通道並返回一個十六進制顏色字符串。 – geotheory

+0

@geotheory據我所知,可悲的是你不能那樣做。您可以使用自己的功能將RGB映射到CMYK,反之亦然。我假設您使用CMYK進行打印以降低色域。 – DhruvJoshi

+0

其實我只是想使用rgb的替代方法創建數據可視化:)讓我們看看是否有其他人知道解決方案。 – geotheory

1

如果你到代碼移植,我發現一對夫婦MATLAB中心的可能性:

http://www.mathworks.com/matlabcentral/fileexchange/25350-fit-multi-dimensional-polynomial (儘管名稱,描述說:「CMYK以實驗室的

http://www.mathworks.com/matlabcentral/fileexchange/45723-convert-rgb-image-to-cmy-image-and-extract-each-component-cyan-c-magenta-m-and-yellow-y

編輯:如果您想反轉hrbmstr的代碼,這裏有一些JavaScript可以TRIV ially可以轉換爲http://www.javascripter.net/faq/rgb2cmyk.htm [R提供):

if (r==0 && g==0 && b==0) { 
    computedK = 1; 
    return [0,0,0,1]; 
} 

computedC = 1 - (r/255); 
computedM = 1 - (g/255); 
computedY = 1 - (b/255); 

var minCMY = Math.min(computedC, 
       Math.min(computedM,computedY)); 
computedC = (computedC - minCMY)/(1 - minCMY) ; 
computedM = (computedM - minCMY)/(1 - minCMY) ; 
computedY = (computedY - minCMY)/(1 - minCMY) ; 
computedK = minCMY; 
1
除了

好於@ hrbrmstr的功能這裏是我的什麼它的價值。我沒有考慮黑色,因爲我明白這主要是爲了打印,但我主要將它看作是一種dataviz工具。它應該與向量/矩陣/ alphas一起工作。

cmy = function(c, m, y, alpha, maxColorValue=1){ 
    if(maxColorValue != 1) { c <- c/maxColorValue; m <- m/maxColorValue; y <- y/maxColorValue } 
    c <- 1-c; m <- 1-m; y <- 1-y 
    hex <- function(v) substring(rgb(v,0,0),2,3) 
    if(!missing(alpha)) alpha <- hex(alpha) else alpha <- '' 
    paste0('#',hex(c), hex(m), hex(y), alpha) 
}