Учитывая определенный цвет в HSL (скажем, hsl (74,64%, 59%)), я хочу вычислить, какой более темный оттенок (с такими же значениями h и s) дает мне достаточный контраст, чтобы удовлетворить W3 C требования к цветовой контрастности.
Существуют формулы для преобразования HSL в RGB (например, https://en.wikipedia.org/wiki/HSL_and_HSV#HSL_to_RGB) и для расчета относительной яркости на основе этого RGB (например, https://www.w3.org/TR/WCAG20/#relativeluminancedef). На основе формулы цветового контраста (https://www.w3.org/TR/WCAG20/#contrast -ratiodef ) я могу рассчитать, какой должна быть относительная яркость для моего другого цвета.
Однако, тогда я застрял. Я не нахожу способ рассчитать обратно от заданной относительной яркости до цвета HSL с заданными h и s.
Используя такие инструменты, как https://contrast-ratio.com/, я могу просто уменьшить яркость, пока она не удовлетворит требования, но я хотел бы, чтобы формула (предпочтительно в JavaScript) выполняла эти вычисления для большого выбора цветов.
(в настоящее время я использую метод двоичного поиска, чтобы найти наиболее близкое значение путем тестирования много преобразований из HSL в RGB в относительную легкость, но это довольно интенсивно, и мне интересно, если переход между RGB между ними вносит неточности.)