2011-06-16 78 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

相关问题