2011-06-16 30 views

回答

9

嚴格地說你不能,因爲alpha不被支持。但是由於alpha是0,所以我們可以認爲它不重要。因此,將每個值傳遞給sprintf(),每個元素的格式說明符爲%02x

c = sprintf('#%02x%02x%02x', val['red'], val['green'], val['blue']); 
+0

有關alpha:見http://www.w3.org/TR/css3-color/#rgba-color與:'顏色:RGBA(0-255 ,0-255,0-255,0-1);'沒問題。一些瀏覽器已經正確解釋了這一點。 – Yoshi 2011-06-16 08:57:16

1

有一個函數在PHP手冊中this page的意見作出了貢獻。

<?PHP 

function rgb2hex2rgb($c){ 
    if(!$c) return false; 
    $c = trim($c); 
    $out = false; 
    if(preg_match("/^[0-9ABCDEFabcdef\#]+$/i", $c)){ 
     $c = str_replace('#','', $c); 
     $l = strlen($c) == 3 ? 1 : (strlen($c) == 6 ? 2 : false); 

     if($l){ 
     unset($out); 
     $out[0] = $out['r'] = $out['red'] = hexdec(substr($c, 0,1*$l)); 
     $out[1] = $out['g'] = $out['green'] = hexdec(substr($c, 1*$l,1*$l)); 
     $out[2] = $out['b'] = $out['blue'] = hexdec(substr($c, 2*$l,1*$l)); 
     }else $out = false; 

    }elseif (preg_match("/^[0-9]+(,| |.)+[0-9]+(,| |.)+[0-9]+$/i", $c)){ 
     $spr = str_replace(array(',',' ','.'), ':', $c); 
     $e = explode(":", $spr); 
     if(count($e) != 3) return false; 
     $out = '#'; 
     for($i = 0; $i<3; $i++) 
      $e[$i] = dechex(($e[$i] <= 0)?0:(($e[$i] >= 255)?255:$e[$i])); 

     for($i = 0; $i<3; $i++) 
      $out .= ((strlen($e[$i]) < 2)?'0':'').$e[$i]; 

     $out = strtoupper($out); 
    }else $out = false; 

    return $out; 
} 

?> 

Output 

#FFFFFF => 
Array{ 
    red=>255, 
    green=>255, 
    blue=>255, 
    r=>255, 
    g=>255, 
    b=>255, 
    0=>255, 
    1=>255, 
    2=>255 
} 


#FFCCEE => 
Array{ 
    red=>255, 
    green=>204, 
    blue=>238, 
    r=>255, 
    g=>204, 
    b=>238, 
    0=>255, 
    1=>204, 
    2=>238 
} 
CC22FF => 
Array{ 
    red=>204, 
    green=>34, 
    blue=>255, 
    r=>204, 
    g=>34, 
    b=>255, 
    0=>204, 
    1=>34, 
    2=>255 
} 

0 65 255 => #0041FF 
255.150.3 => #FF9603 
100,100,250 => #6464FA 
0

你可以試試下面這段簡單的代碼。

$rgb = (123,222,132); 
$rgbarr = explode(",",$rgb,3); 
echo sprintf("#%02x%02x%02x", $rgbarr[0], $rgbarr[1], $rgbarr[2]); 

這將返回#7bde84

相關問題