PHP如何从R+;G+;B

PHP如何从R+;G+;B,php,html,hex,rgb,Php,Html,Hex,Rgb,我有一个数组: Array ( [red] => 252 [green] => 168 [blue] => 166 [alpha] => 0 ) 它是函数imagecolorsforindex的输出 如何从这些元素中获取HTML代码?例如:#99CCFF严格来说,您不能,因为alpha不受支持。但是由于alpha是0,我们可以假设这无关紧要。同样地,对于每个元素,使用格式说明符%02x将每个值传递到 c = sprintf('#%02x%


我有一个数组:

Array
(
    [red] => 252
    [green] => 168
    [blue] => 166
    [alpha] => 0
)
它是函数imagecolorsforindex的输出

如何从这些元素中获取HTML代码?例如:#99CCFF

严格来说,您不能,因为alpha不受支持。但是由于alpha是0,我们可以假设这无关紧要。同样地,对于每个元素,使用格式说明符
%02x
将每个值传递到

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


PHP手册的注释中提供了一个函数

<?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 

输出
#FFFFFF=>
排列{
红色=>255,
绿色=>255,
蓝色=>255,
r=>255,
g=>255,
b=>255,
0=>255,
1=>255,
2=>255
}
#FFCCEE=>
排列{
红色=>255,
绿色=>204,
蓝色=>238,
r=>255,
g=>204,
b=>238,
0=>255,
1=>204,
2=>238
}
CC22FF=>
排列{
红色=>204,
绿色=>34,
蓝色=>255,
r=>204,
g=>34,
b=>255,
0=>204,
1=>34,
2=>255
}
0 65 255=>0041FF
255.150.3=>FF9603
100100250=>#6464FA

您可以尝试下面这段简单的代码

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

关于alpha:See的信息:
颜色:rgba(0-255,0-255,0-255,0-1)没有问题。一些浏览器已经正确地解释了这一点。
$rgb = (123,222,132);
$rgbarr = explode(",",$rgb,3);
echo sprintf("#%02x%02x%02x", $rgbarr[0], $rgbarr[1], $rgbarr[2]);