Я попробовал другой подход к этому, я использовал процент яркости HSL (оттенок, насыщенность и яркость), чтобы проверить, является ли цвет темным или светлым. (как сказал @chrisf в своем ответе)
функция:
function colorislight($hex) {
$hex = str_replace('#', '', $hex);
$r = (hexdec(substr($hex, 0, 2)) / 255);
$g = (hexdec(substr($hex, 2, 2)) / 255);
$b = (hexdec(substr($hex, 4, 2)) / 255);
$lightness = round((((max($r, $g, $b) + min($r, $g, $b)) / 2) * 100));
return ($lightness >= 50 ? true : false);
}
В обратной строке проверяется, превышает ли процент освещенности более 50%, и возвращает true, в противном случае возвращается false. Вы можете легко изменить его на true, если цвет имеет 30% яркости и так далее. Переменная $lightness
может возвращать от 0 до 100 0, что является самым темным, а 100 - самым светлым.
как использовать функцию:
$color = '#111111';
if ( colorislight($color) ) {
echo 'this color is light';
}
else {
echo 'this color is dark';
}