Тройной HEX код в RGB - PullRequest
       14

Тройной HEX код в RGB

2 голосов
/ 06 января 2012

У меня есть двойники с преобразованием тройной HEX цветовых кодов в и RGB цветовой код .

Что у меня получилосьдля HEX в RGB равно:

if(strlen($hex) == 3) {
        $color['r'] = hexdec(substr($hex, 0, 1) . $r);
        $color['g'] = hexdec(substr($hex, 1, 1) . $g);
        $color['b'] = hexdec(substr($hex, 2, 1) . $b);
    }

Когда я конвертирую код RGB в HEX, это другой.

Например: #FFF becomes 15, 15, 15, но 15, 15, 15 is #0F0F0F

Я также не уверен насчет преобразования RGB в тройной HEX-код.Мой код для RGB в HEX выглядит следующим образом:

$hex = str_pad(dechex($r), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex($g), 2, "0", STR_PAD_LEFT);
$hex.= str_pad(dechex($b), 2, "0", STR_PAD_LEFT);

Любая помощь с благодарностью!Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 06 января 2012
function hex2rgb($hex)
{
    // Ensure we're working only with upper-case hex values,
    // toss out any extra characters.
    $hex = preg_replace('/[^A-F0-9]/', '', strtoupper($hex));

    // Convert 3-letter hex RGB codes into 6-letter hex RGB codes
    $hex_len = strlen($hex);
    if ($hex_len == 3) {
        $new_hex = '';
        for ($i = 0; $i < $hex_len; ++$i) {
            $new_hex .= $hex[$i].$hex[$i];
        }
        $hex = $new_hex;
    }

    // Calculate the RGB values
    $rgb['r'] = hexdec(substr($hex, 0, 2));
    $rgb['g'] = hexdec(substr($hex, 2, 2));
    $rgb['b'] = hexdec(substr($hex, 4, 2));

    return $rgb;
}

print_r(hex2rgb('#fff'));      // r: 255 g: 255 b: 255
print_r(hex2rgb('#AE9C00'));   // r: 174 g: 156 b: 0
2 голосов
/ 06 января 2012

Похоже, вам нужно обрабатывать триплеты другим способом: #XYZ = #XXYYZZ.#FFF должен быть, например, таким же, как #FFFFFF или, ну, (255, 255, 255) вместо (15, 15, 15).

Итак, способ сделать это сследующий код:

if(strlen($hex) == 3) {
    $color['r'] = hexdec(substr($hex, 0, 1) . substr($hex, 0, 1));
    $color['g'] = hexdec(substr($hex, 1, 1) . substr($hex, 1, 1));
    $color['b'] = hexdec(substr($hex, 2, 1) . substr($hex, 2, 1));
}

Примечание. Я не включаю $ r, $ g и $ b, так как не знаю, почему вы их используете.

...