Конвертировать цвета RGB в цвета DM C нить - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь найти автоматический способ вычислить, какой DM C цвет ближе всего к данному RGB. Я нашел этот сайт:

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

И это то, что я хочу. Однако я должен печатать каждый RGB отдельно и у меня их много.

Я бы хотел использовать формулы для автоматизации вычислений. Желательно в Excel или R. Мне не повезло с Selenium (и сейчас у меня не так много свободного времени, чтобы освоить скорость), так что это может быть не лучшим вариантом для автоматического заполнения форм на вышеуказанном сайте. .

Есть идеи?

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Пакет DM C R ( 1 ) поможет с этим. Похоже, что он поддерживает только шестнадцатеричные коды, но вы можете конвертировать цвета RGB, используя функцию rgb из пакета grDevices (используйте maxColorValue = 255, если вы используете RGB против rgb).

# 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

Если у вас есть несколько цветов, вы можете обернуть их в oop или применить функцию и записать значения dm c в главный объект, извлекая нужные элементы (например, color_dmc$hex, * 1012). *, et c.)

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

0 голосов
/ 31 марта 2020

Здесь приведен список значений RGB, соответствующих цветам нити DM C: http://my.crazyartzone.com/dmc.asp. Есть также список, встроенный в исходный код найденной вами веб-страницы (и он другой). Вы можете увидеть этот список по этому адресу: http://www.damaniel.info/dmc/dmctorgb.js.

Почему они разные? Существуют разные стандарты для RGB. Самый распространенный из них теперь называется sRGB (для «Стандартного RGB»). Они могут использовать разные стандарты. Или, может быть, они получают свои цвета из разных источников. В любом случае они приблизительны: цвет нити различен. Так что просто выберите один.

Тогда вам нужно взять значение RGB и найти ближайшее значение в одном из этих списков.

Это не тривиально, потому что определение " Ближайший "сложно. Похоже, что эта веб-страница использует евклидово расстояние в пространстве RGB, но это пространство далеко не однородно для восприятия. Так что, вероятно, лучше всего преобразовать и ваш входной цвет RGB, и таблицу цветов нити в другое представление, где равные расстояния воспринимаются одинаково. Я думаю, что пространство LAB (см. ?colorspace::LAB), вероятно, является хорошим выбором для этого, но я не знаю, лучше ли оно. Прочитайте http://colorspace.r-forge.r-project.org/articles/color_spaces.html, если хотите углубиться в детали.

Итак, вот что вам нужно сделать:

  1. Загрузить версию одной из этих таблиц в кадр данных.
  2. Преобразуйте все значения RGB там в значения LAB и добавьте их в кадр данных.
  3. Напишите функцию для преобразования входного значения RGB в LAB.
  4. Найдите ближайшую запись LAB в кадре данных для требуемого значения LAB и выведите соответствующий номер нити.

РЕДАКТИРОВАНИЕ ДОБАВЛЕНО: Пока я писал, @dcruvolo указал на симпатичный dmc пакет. Так что используйте это! (Возможно, вы хотите изменить способ определения расстояния; вам действительно не нужно евклидово расстояние по умолчанию в пространстве RGB.)

...