用于RGBA到HEX颜色转换的R函数
R function for RGBA to HEX color conversion
我正在寻找一些 function in r which can convert a rgba color to Hex e.g. rgba(240, 177, 76, 0.80)
. There are plethora of functions available from rgb 到十六进制的转换,例如plotrix::rgb.to.hex()
但不适用于 RGBA。
非常感谢任何指点。
这个话题已经讨论过Convert RGBA to HEX
但是,我不知道 R 包提供了随时可用的功能。
您可以将 RGBA 转换为 RGB:
由于这取决于背景像素的颜色 (Convert RGBA color to RGB),因此您必须定义背景颜色。
color_RGBA
是您的 RGBA 颜色,background_RGB
是背景颜色。
你可以把col2rgb("white")
当作background_RGB
来举例。
rgba2rgb <- function(background_RGB, color_RGBA){
# get alpha
alpha=color_RGBA[4]
# get new color
new_col=matrix(c(
(1 - alpha) * background_RGB[1] + alpha * color_RGBA[1],
(1 - alpha) * background_RGB[2] + alpha * color_RGBA[2],
(1 - alpha) * background_RGB[3] + alpha * color_RGBA[3]),
nrow=3,ncol=1,dimnames=list(c("red","green","blue"))
)
return(new_col)
}
然后将 RGB 转换为 HEX:
rgb2hex <- function(x) rgb(x[1], x[2], x[3], maxColorValue = 255)
我觉得一种可能的解决方案是在颜色的 rgb 定义中添加 alpha 值(透明度)。您可以使用添加 alpha
参数的 rgb()
函数来完成。如果颜色通道 r、g 和 b 在 0 和 255 之间,则必须使用 maxColorValue = 255
并在 0 和 255 之间表示 alpha
,其中 0 对应于完全透明,255 对应于完全不透明(全彩)
让我展示一下您案例的结果 rgba(240, 177, 76, 0.80)
:
your_color <- rgb(240, 177, 76, alpha = 0.8 * 255, maxColorValue = 255)
# equivalent to
# your_color <- rgb(t(c(240, 177, 76)/ 255), alpha = 0.8)
your_color
#> [1] "#F0B14CCC"
我会将你的颜色与其他人一起绘制,以便更好地了解应用的透明度。
- 全彩
full_color <- rgb(240, 177, 76, alpha = 255, maxColorValue = 255)
full_color
#> [1] "#F0B14CFF"
# equivalent to "#F0B14C"
- 半透明色
half_transparent <- rgb(t(c(240, 177, 76)/255), alpha = 0.5)
half_transparent
#> [1] "#F0B14C80"
old_par <- par(mar = c(1, 0, 0.5 ,0) + 0.1, mgp = c(1, 0, 0))
barplot(rep(1, 3), names.arg = c("yours", "full", "half"),
col = c(your_color, full_color, half_transparent), axes = FALSE, cex.names = 1)
par(old_par)
另一个问题是,哪种完整的 RGB 颜色相当于具有透明度级别的给定颜色。 @capcoma 的回答在这里有所帮助。使用
background_color <- col2rgb("white")
background_color
#> [,1]
#> red 255
#> green 255
#> blue 255
your_color_rgb <- col2rgb(your_color, alpha = T)
your_color_rgb
#> [,1]
#> red 240
#> green 177
#> blue 76
#> alpha 204
alpha <- your_color_rgb[4, 1]/255
alpha
#> alpha
#> 0.8
new_rgb <- (1-alpha) * background_color + alpha * your_color_rgb[-4, 1, drop = FALSE]
new_rgb_equivalent <- rgb(t(new_rgb), maxColorValue = 255)
new_rgb_equivalent
#> [1] "#F3C06F"
new_rgb
的表达式完全等同于@capcoma 的函数rgba2rgb()
。我们可以绘制等效的 rgb 颜色(“eq”)与上面的其他 3 个
old_par <- par(mar = c(1, 0, 0.5 ,0) + 0.1, mgp = c(1, 0, 0))
barplot(rep(1, 4), names.arg = c("yours", "full", "half", "eq"),
col = c(your_color, full_color, half_transparent,
new_rgb_equivalent), axes = FALSE, cex.names = 0.8)
par(old_par)
第 1 列和第 4 列的颜色应该相同。希望你觉得这很有用。
由 reprex package (v0.3.0)
于 2020-12-03 创建
我正在寻找一些 function in r which can convert a rgba color to Hex e.g. rgba(240, 177, 76, 0.80)
. There are plethora of functions available from rgb 到十六进制的转换,例如plotrix::rgb.to.hex()
但不适用于 RGBA。
非常感谢任何指点。
这个话题已经讨论过Convert RGBA to HEX 但是,我不知道 R 包提供了随时可用的功能。
您可以将 RGBA 转换为 RGB:
由于这取决于背景像素的颜色 (Convert RGBA color to RGB),因此您必须定义背景颜色。
color_RGBA
是您的 RGBA 颜色,background_RGB
是背景颜色。
你可以把col2rgb("white")
当作background_RGB
来举例。
rgba2rgb <- function(background_RGB, color_RGBA){
# get alpha
alpha=color_RGBA[4]
# get new color
new_col=matrix(c(
(1 - alpha) * background_RGB[1] + alpha * color_RGBA[1],
(1 - alpha) * background_RGB[2] + alpha * color_RGBA[2],
(1 - alpha) * background_RGB[3] + alpha * color_RGBA[3]),
nrow=3,ncol=1,dimnames=list(c("red","green","blue"))
)
return(new_col)
}
然后将 RGB 转换为 HEX:
rgb2hex <- function(x) rgb(x[1], x[2], x[3], maxColorValue = 255)
我觉得一种可能的解决方案是在颜色的 rgb 定义中添加 alpha 值(透明度)。您可以使用添加 alpha
参数的 rgb()
函数来完成。如果颜色通道 r、g 和 b 在 0 和 255 之间,则必须使用 maxColorValue = 255
并在 0 和 255 之间表示 alpha
,其中 0 对应于完全透明,255 对应于完全不透明(全彩)
让我展示一下您案例的结果 rgba(240, 177, 76, 0.80)
:
your_color <- rgb(240, 177, 76, alpha = 0.8 * 255, maxColorValue = 255)
# equivalent to
# your_color <- rgb(t(c(240, 177, 76)/ 255), alpha = 0.8)
your_color
#> [1] "#F0B14CCC"
我会将你的颜色与其他人一起绘制,以便更好地了解应用的透明度。
- 全彩
full_color <- rgb(240, 177, 76, alpha = 255, maxColorValue = 255)
full_color
#> [1] "#F0B14CFF"
# equivalent to "#F0B14C"
- 半透明色
half_transparent <- rgb(t(c(240, 177, 76)/255), alpha = 0.5)
half_transparent
#> [1] "#F0B14C80"
old_par <- par(mar = c(1, 0, 0.5 ,0) + 0.1, mgp = c(1, 0, 0))
barplot(rep(1, 3), names.arg = c("yours", "full", "half"),
col = c(your_color, full_color, half_transparent), axes = FALSE, cex.names = 1)
par(old_par)
另一个问题是,哪种完整的 RGB 颜色相当于具有透明度级别的给定颜色。 @capcoma 的回答在这里有所帮助。使用
background_color <- col2rgb("white")
background_color
#> [,1]
#> red 255
#> green 255
#> blue 255
your_color_rgb <- col2rgb(your_color, alpha = T)
your_color_rgb
#> [,1]
#> red 240
#> green 177
#> blue 76
#> alpha 204
alpha <- your_color_rgb[4, 1]/255
alpha
#> alpha
#> 0.8
new_rgb <- (1-alpha) * background_color + alpha * your_color_rgb[-4, 1, drop = FALSE]
new_rgb_equivalent <- rgb(t(new_rgb), maxColorValue = 255)
new_rgb_equivalent
#> [1] "#F3C06F"
new_rgb
的表达式完全等同于@capcoma 的函数rgba2rgb()
。我们可以绘制等效的 rgb 颜色(“eq”)与上面的其他 3 个
old_par <- par(mar = c(1, 0, 0.5 ,0) + 0.1, mgp = c(1, 0, 0))
barplot(rep(1, 4), names.arg = c("yours", "full", "half", "eq"),
col = c(your_color, full_color, half_transparent,
new_rgb_equivalent), axes = FALSE, cex.names = 0.8)
par(old_par)
第 1 列和第 4 列的颜色应该相同。希望你觉得这很有用。
由 reprex package (v0.3.0)
于 2020-12-03 创建