Преобразование значений цвета Lab в RGB и HEX в R

Преобразование значений RGB в значения HEX легко с помощью R:

    x <- c("165 239 210", "111 45 93")
    sapply(strsplit(x, " "), function(x)
    rgb(x[1], x[2], x[3], maxColorValue=255))
    #[1] "#A5EFD2" "#6F2D5D"

Как я могу преобразовать значения CIELab в RGB и HEX?

x <- c("20 0 0", "50 0 0")
[...code...]
#[1] "#303030" "#777777"

person Borexino    schedule 01.10.2017    source источник
comment
Взгляните на ?convertColor   -  person Andrew Gustar    schedule 01.10.2017


Ответы (2)


Вот один из способов использования library(colorspace)

library(colorspace)

z <- c("20 0 0", "50 0 0")
b <- do.call(rbind, lapply(strsplit(z, split = " "), as.numeric))
b <- LAB(b)
as(b, "RGB")
#output:
              R          G          B
[1,] 0.02989077 0.02989025 0.02989294
[2,] 0.18418803 0.18418480 0.18420138

Он не может преобразовывать напрямую в HEX, но может преобразовывать в: RGB, XYZ, HSV, HLS, LAB, polarLAB, LUV, polarLUV.

person missuse    schedule 01.10.2017

Использование стиля tidyverse и функции convertColor.

convert_lab2rgb <- function(x){
    x %>% 
    unlist() %>% 
    convertColor(from='Lab', to='sRGB') %>%
    as.vector()
}


convert_rgb2hex <- function(x){
    x %>% 
    unlist() %>% 
    `*`(255) %>% 
    round() %>% 
    as.hexmode() %>% 
    paste(collapse='') %>% 
    paste0('#', ., collapse='')    
}


c("20 0 0", "50 0 0") %>% 
    map(~ str_split(., pattern=' ')[[1]]) %>% 
    map(as.numeric) %>%
    map(convert_lab2rgb) %>% 
    map(convert_rgb2hex)


## #303030'
## #777777'
person Rafael Toledo    schedule 04.05.2021