У меня есть шестнадцатеричное значение некоторого цвета, например # 202010
.
Как создать новый цвет, который будет светлее или темнее, заданный в процентах (т.е. На 20% темнее) в PHP?
Вот пример:
<?php
$color = '#aabbcc'; // The color we'll use
Извлеките цвета. Я бы предпочел использовать регулярные выражения, хотя, вероятно, есть и другие более эффективные способы.
if(!preg_match('/^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i', $color, $parts))
die("Not a value color");
Теперь у нас есть красный цвет в $ parts [1]
, зеленый в $ parts [2]
и синий в $ parts [3]
. Теперь давайте преобразуем их из шестнадцатеричного в целые числа:
$out = ""; // Prepare to fill with the results
for($i = 1; $i <= 3; $i++) {
$parts[$i] = hexdec($parts[$i]);
Затем мы уменьшим их на 20%:
$parts[$i] = round($parts[$i] * 80/100); // 80/100 = 80%, i.e. 20% darker
// Increase or decrease it to fit your needs
Теперь мы снова превратим их в шестнадцатеричные числа и добавим их к нашей выходной строке
$out .= str_pad(dechex($parts[$i]), 2, '0', STR_PAD_LEFT);
}
Затем просто добавим «#» в начало строки, и все!