Escurecer a cor HEX em PHP

Eu precisava escurecer as cores definidas pelo usuário e descobri isso.

Não é muito preciso (para isso mudaria para HSL e mudaria a luminosidade) e não pode clarear a cor, mas atende às minhas necessidades.

Função:

function darken_color($rgb, $darker=2) {

$hash
= (strpos($rgb, '#') !== false) ? '#' : '';
$rgb
= (strlen($rgb) == 7) ? str_replace('#', '', $rgb) : ((strlen($rgb) == 6) ? $rgb : false);
if(strlen($rgb) != 6) return $hash.'000000';
$darker
= ($darker > 1) ? $darker : 1;

list
($R16,$G16,$B16) = str_split($rgb,2);

$R
= sprintf("%02X", floor(hexdec($R16)/$darker));
$G
= sprintf("%02X", floor(hexdec($G16)/$darker));
$B
= sprintf("%02X", floor(hexdec($B16)/$darker));

return $hash.$R.$G.$B;
}

Exemplo de uso:

$color = '#45ff33';
$darker
= darken_color($color, $darker=2);

echo
"$color => $darker";

Para melhores resultados, o valor do segundo parâmetro deve estar entre 1 e 4 e pode ser decimal.

Exemplo de trabalho