Подтвердить что ты не робот

Как программно выбрать оптимальные цвета RGB?

Предположим, что в вашей программе:

  • color A - это цвет, который мы произвольно выбираем

  • Зная color A, , как я могу выбрать color B, который будет в высоком контрасте с color A?

Проблема может быть дополнительно уменьшена до: "Представьте себе 2 квадрата, заполненные цветом рядом друг с другом. Он должен быть однозначно прозрачным для человеческого глаза, что цвета не совпадают"

Пример:

  • Черный → Белый
  • Синий → Белый
4b9b3361

Ответ 1

Существует некоторая информация в Руководстве по доступности веб-контента (WCAG) 2.0 (http://www.w3.org/TR/2008/REC-WCAG20-20081211)

Вот хороший пример на этом сайте, но он подсчитал, где достаточно двух цветов, а не как их получить.

Чтобы выбрать цвет с хорошим контрастом, я бы пошел с дополнительными цветами: например, выберите случайный цвет A, преобразуйте его в пространство HSV, получите дополнительный оттенок.

Дополнительный оттенок: после преобразования цвета с RGB на HSV дополнительный оттенок будет составлять 180 градусов (или 0,5, в нормированном значении 0-1). Этот сайт имеет что-то об этом в PHP

Ответ 2

Поскольку я искал лучший способ сделать это, я наткнулся на руководство Adobe Illustrator, в котором упоминается, как они создают дополнительные цвета. Они говорят:

Комплемент Изменяет каждый компонент цвета на новое значение на основе суммы наивысших и самых низких значений RGB в выбранном цвете. Illustrator добавляет самые низкие и самые высокие значения RGB текущего цвета, а затем вычитает значение каждого компонента из этого числа для создания новых значений RGB. Например, предположим, что вы выбрали цвет с RGB значением 102 для красного, 153 для зеленого и 51 для синего. Illustrator добавляет высокие (153) и низкие (51) значения, чтобы получить новое значение (204). Каждое из значений RGB в существующем цвете вычитается из нового значения для создания новых дополнительных значений RGB: 204 - 102 (текущее красное значение) = 102 для нового красного значения, 204 - 153 (текущее значение зеленого) = 51 для нового зеленого значения и 204 - 51 (текущее синее значение) = 153 для нового синего значения.

Было бы не так сложно сделать это программно и подумать, на этот раз, что он действительно может работать на то, что вы пытаетесь сделать.

Удачи!