Як інвертувати кольори HEX в PHP

Сніппет

Ця функція інвертує HEX колір (білий у чорний, синій у жовтий, тощо):

downloadcopy
<?php
function hexInvert(string $color):string {
    $color = trim($color);
    $prependHash = false;
    if (strpos($color, '#') !== false) {
        $prependHash = true;
        $color = str_replace('#', '', $color);
    }
    $len = strlen($color);
    if($len==3 || $len==6){
        if($len==3) $color = preg_replace('/(.)(.)(.)/', "\\1\\1\\2\\2\\3\\3", $color);
    } else {
        throw new \Exception("Неприпустима довжина коду HEX ($len). Довжина має бути 3 або 6 символів.");
    }
    if (!preg_match('/^[a-f0-9]{6}$/i', $color)) {
        throw new \Exception(sprintf('Невірний hex рядок #%s', htmlspecialchars($color, ENT_QUOTES)));
    }

    $r = dechex(255 - hexdec(substr($color, 0, 2)));
    $r = (strlen($r) > 1) ? $r : '0' . $r;
    $g = dechex(255 - hexdec(substr($color, 2, 2)));
    $g = (strlen($g) > 1) ? $g : '0' . $g;
    $b = dechex(255 - hexdec(substr($color, 4, 2)));
    $b = (strlen($b) > 1) ? $b : '0' . $b;

    return ($prependHash ? '#' : '') . $r . $g . $b;
}

// Приклад використання
echo hexInvert('#000'); // #ffffff
echo PHP_EOL.'<br>'.PHP_EOL;
echo hexInvert('ff1100'); // 00eeff