将 RGB 颜色转换为 DMC 牙线颜色

Convert RGB colors to DMC floss colors

我正在尝试找到一种自动计算 DMC color 最接近给定 RGB 的方法。我找到了这个网站:

http://www.damaniel.info/dmc/dmctorgb.html

这就是我想要的。但是,我必须分别输入每个 RGB,而且我有很多。

我想使用公式来自动计算。最好在 Excel 或 R 中。我在 Selenium 方面运气不佳(现在没有太多空闲时间来加快速度),因此这可能不是进行自动表单填写的最佳选择与上述网站。

有什么想法吗?

DMC R 包 (1) 将对此有所帮助。看起来它只支持十六进制代码,但您可以使用 grDevices 包中的 rgb 函数转换 RGB 颜色(如果您使用 RGBrgb).

# install.packages("devtools")
# devtools::install_github("sharlagelfand/dmc")
library(dmc)


# convert rbg to hex
# second green color from ColorBrewer.org
# (3-class BuGn second color)
color <- grDevices::rgb(red = 153, green = 216, blue = 201, maxColorValue = 255)

# find dmc - return a few more results
color_dmc <- dmc(color, n = 3)
color_dmc

如果你有几种颜色,你可以将其包装在一个循环中或应用函数并通过提取你需要的元素将 dmc 值写入主对象(即 color_dmc$hexcolor_dmc$name, 等等)

1 https://github.com/sharlagelfand/dmc

这里有一个与 DMC 牙线颜色对应的 RGB 值列表:http://my.crazyartzone.com/dmc.asp . There's also a list built in to the source code for the web page you found (and it's different). You can see that list at this URL: http://www.damaniel.info/dmc/dmctorgb.js

它们为什么不同? RGB 有不同的标准。最常见的一种现在称为 sRGB(代表 "Standard RGB")。他们可能使用不同的标准。或者也许他们从不同的来源获得颜色。无论如何,它们是近似值:牙线的颜色各不相同。所以就挑一个吧。

那么您需要做的是获取您的 RGB 值并在其中一个列表中找到最接近的值。

这不是微不足道的,因为定义 "nearest" 很困难。该网页似乎是在 RGB space 中使用欧氏距离,但 space 远非感知均匀。因此,最好将输入的 RGB 颜色和牙线颜色的 table 转换为其他表示形式,其中等距离在感知上是相等的。我认为 LAB space(参见 ?colorspace::LAB)可能是一个不错的选择,但我不知道它是否最好。如果您想深入了解细节,请阅读 http://colorspace.r-forge.r-project.org/articles/color_spaces.html

所以这是你需要做的:

  1. 将其中一个 table 的版本加载到数据框中。
  2. 将其中的所有 RGB 值转换为 LAB 值,并将其添加到数据帧中。
  3. 编写一个函数将输入的 RGB 值转换为 LAB。
  4. 在dataframe中找到离你想要的LAB值最近的LAB条目,输出对应的牙线号。

编辑添加:当我写这篇文章时,@dcruvolo 指出了很好的 dmc 包。所以用那个! (也许您想更改它计算距离的方式;您真的不想要 RGB 中的默认欧几里德距离 space。)