Изменить оттенок, насыщенность и яркость в цветовом пространстве HSL очень просто. См., Например, эту реализацию JavaScript.
Также легко создавать цветовые схемы, такие как: аналоговая, монохроматическая, триада, тетрада и т. Д. См. эту реализацию javascript а>.
Проблема в том, что цветовая система HSL не является однородной по восприятию.
И на самом деле это настоящая проблема.
Если вы не понимаете, о чем я говорю, ничего страшного. Прочтите об этом: здесь и здесь. (эти две статьи действительно короткие, но очень ценные, вам действительно стоит их прочитать).
Решение заключается в использовании однородного по восприятию цветового пространства, например CieLab, CieLuv или Hcl.
Проблема в том, что эти цветовые пространства также имеют цвета, выходящие за пределы гаммы (цвета, которые не могут быть отображены).
Для работы с разными цветовыми пространствами в javascript ознакомьтесь с chroma.js или chromatist.
После этого небольшого введения вот моя настоящая проблема:
Я хочу создавать однородные для восприятия цветовые схемы (аналогичные, триадные, тетрадные, дополнительные и т. Д.). Как я уже упоминал в Hsl, это просто: например, чтобы сгенерировать схему триады, я просто вращаю HUE на 120, затем на 240, и у меня есть схема триады.
Что ж, в CieLab, Hcl или CieLuv все не так просто. В Hcl (оттенок, цветность, яркость), если я поверну оттенок со 120 градациями без изменения цветности и яркости, возможно, что сгенерированный цвет не будет отображаться (будет за пределами пространства RGB).
Резюмируем вопрос:
Как я могу создать цветовые схемы в перцептуально однородной цветовой системе (например, CieLab, Hcl, CieLuv или любом другом перцептивно однородном цветовом пространстве)?
Я хочу реализовать это в javascript, но в основном я хочу найти метод, поэтому вопрос не зависит от языка.
Надеюсь, вместе мы найдем умный способ :)