Как генерировать светлее / темный цвет с PHP?

У меня есть шестнадцатеричное значение некоторого цвета, например # 202010 .

Как создать новый цвет, который будет светлее или темнее, заданный в процентах (т.е. На 20% темнее) в PHP?

48
задан lorem monkey 31 July 2015 в 02:38
поделиться

1 ответ

Вот пример:

<?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);
}

Затем просто добавим «#» в начало строки, и все!

22
ответ дан 7 November 2019 в 12:02
поделиться