2012-01-05 3 views
2

Я имеющих toubles с преобразования тройные цветовые коды HEX вRGB код цвета.Тройной код 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); 

Любая помощь очень ценится! Заранее спасибо!

+0

Кажется, что «снятие прокладки» вернет его? Вам нужно знать заранее, если вы собираетесь вывести 3 или 6: если вы выведете 6, масштабируйте каждый компонент на 16. Некоторые браузеры могут не поддерживать 3, поэтому я всегда буду излучать 6. –

+0

Так вот как я возвращаю RGB HEX, да? Но как насчет неправильного кода RGB от тройного кода HEX? – Fabian

+2

@pst должен ли это быть ответом вместо комментария? Положите немного больше работы, чтобы объяснить этот комментарий, и вы могли бы получить несколько хороших точек репутации. – Jan

ответ

2

Похоже, вам нужно обрабатывать триплеты по-другому: #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)); 
} 

Примечание Я не включая $ г, $ г и $ Ь, так как я не знаю, почему вы их используете ,

+0

вот и все! Спасибо!! – Fabian

2
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 
+0

тоже очень полезно, спасибо .. – Fabian

Смежные вопросы