Как увеличить контраст между цветами, сгенерированными из изображения?

Некоторые детали:

Я делаю небольшой прототип во Framer, какое-то приложение для обоев. Я использую vibrant.js для автоматического выбора цветов из изображений, чтобы добавить немного оттенка моему интерфейсу. Я использую два ярких цветовых профиля: «DarkMuted» — для фона и «Vibrant» — для активных элементов управления/акцентов и т. д.

К сожалению, сочетание цветов иногда выглядит тусклым и ненасыщенным, активные элементы выделяются не так сильно, как хотелось бы. Поэтому моим первым решением было

Слепое редактирование цветов.

Я преобразовываю их в hsl и явно устанавливаю значения s и l.

s: .2, l: .2  #  DarkMuted

s: .6, l: .8  #  Vibrant

Это создает достаточный контраст между ними, но также имеет недостаток: иногда цвета выглядят немного перенасыщенными и искаженными (по сравнению с входными данными).

По этой ссылке вы можете найти пары скриншотов, чтобы показать вам разницу между "исходной" цветовой парой возвращаемый "vibrant.js" и цветами с скорректированными значениями s и l.

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

Я бы сказал, что субъективно приемлемая цветопередача составляет ~ 65%, но результат слишком непредсказуемый. Поскольку это автоматическое решение, я не могу полагаться на него слишком сильно.

Поэтому я решил подойти к этому иначе:

Создайте кучу цветов и отфильтруйте один

Проблема вот в чем:

Я не нашел, как генерировать более одного цвета для профиля с помощью dynamic.js.

Кроме того, я попробовал библиотеку color-thief.js, чтобы создать палитру доминирующих цветов, а затем отфильтровать, как я это называю, "яркий" цвет.

# Threshold values I used 
thr = {minL: .4, maxL: .8, minS: .6, maxS: .8}

Но тут возникает другая проблема - не в каждом изображении есть набор цветов, который попадает под мой порог. Некоторые изображения имеют пастельную гамму или ч/б и ничего не возвращают.

So,

  • Могу ли я преодолеть ограничение Vibrant.js 1 цвет на профиль, чтобы иметь несколько «ярких» цветов, а затем выбрать тот, который соответствует моим требованиям?

  • Или, может быть, есть другое/лучшее решение?


person Anton Kosarchyn    schedule 20.02.2018    source источник
comment
Вы нашли решение?   -  person Crashalot    schedule 20.10.2019


Ответы (1)


Существует спецификация минимального контраста между цветами (WCAG), вы можете найти ее здесь. Таким образом, возможной стратегией будет извлечение цветов с помощью Яркий.js, а после этого вы можете проверить контраст с помощью функции. Вы можете найти руководство по созданию функции для проверки цветового контраста здесь. Последним шагом, вероятно, будет создание цветовых вариаций с хорошим контрастом на основе результатов функции цветового контраста. Вы можете создавать варианты, используя эту библиотеку.

person Fábio Alencar    schedule 26.01.2021