@spido

Как написать условие где параметром является цвет?

Приветствую!
Ищу способ написать условие, где параметром является цвет в формате каком угодно, лиж бы работало.

Сейчас делаю так:
if ($page_back_color > '#f2f2f1') {
 голова
 } else {
  ноги
}


Как ни странно, в большинстве случаев это работает, но при некоторых цветах бывает неправильно сравнивает.
Нужен способ сравнивать цвета, какой темнее или светлее относительно другого цвета, например как в условии '#f2f2f1'.
Ваши идеи?

Заранее спасибо откликнувшимся!
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
sergiks
@sergiks Куратор тега PHP
♬♬
Цвет обычно характеризуется тремя параметрами. В зависимости от цветовой модели: RGB (красный, зелёный, синий); HSV (оттенок, насыщенность, яркость); Lab (яркость, красно-зеленая ось, сине-жёлтая ось) и др. Больше-меньше можно сравнить только по какой-то одной оси.

«темнее, чем #f2f2f1» – можно определять, переведя цвет из RGB в HSV или Lab (гуглите формулы) и сравнивая только компонент яркости.

Ну, или безобразно упростить до трёх сравнений: каждого из R, G, B компонентов: R < 0xF2 || B < 0xF2 || B < 0xF1 Здесь косяк в том, что один компонент (напр. R) чуть-меньше порога, и остальные много выше него – дадут цвет более светлый, а этот подход посчитает его темнее.

str_split('f1f2f3', 2) даст массив ['f1', 'f2', 'f3'].

intval('f1', 16) сделает из строки 'f1' число 241.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы