2012-01-05 78 views
2

我有toubles與一個RGB顏色代碼轉換三重 HEX顏色代碼。三重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, 1515, 15, 15 is #0F0F0F

我也不能確定RGB轉換回三重十六進制代碼。我對RGB爲十六進制代碼如下所示:

$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. – 2012-01-06 00:02:10

+0

因此,這就是我如何返回RGB HEX,對吧?但是,從三重HEX代碼錯誤的RGB代碼呢? – Fabian 2012-01-06 00:07:30

+2

@pst應該是一個答案,而不是評論?在解釋該評論時多加點工作,你可以獲得一些不錯的聲望點。 – Jan 2012-01-06 00:16:34

回答

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

注意,我不包括$ R,$ G和$ b,因爲我不爲什麼要使用他們知道。

+0

就是這樣!謝謝!! – Fabian 2012-01-06 00:14:25

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 2012-01-06 10:58:36