如何将十六进制转换为rgb,以便它可以与imagecolourset一起使用?

时间:2017-04-11 18:11:02

标签: php wordpress

我有一个图像,我想根据变量设置的颜色更改颜色。我遇到的问题是,值来自数据源为十六进制,而imagecolourset与rgb一起使用。 我已经设置了转换功能:

    function hex2rgb($hex) {
 $hex = str_replace("#", "", $hex);

 if(strlen($hex) == 3) {
  $r = hexdec(substr($hex,0,1).substr($hex,0,1));
  $g = hexdec(substr($hex,1,1).substr($hex,1,1));
  $b = hexdec(substr($hex,2,1).substr($hex,2,1));
} else {
  $r = hexdec(substr($hex,0,2));
  $g = hexdec(substr($hex,2,2));
  $b = hexdec(substr($hex,4,2));
}
 $rgb = array($r, $g, $b);
  return implode(",", $rgb); // returns the rgb values separated by commas

}

然后像这样使用它:

 $homeRGB = hex2rgb($homeColour);
 imagecolorset($him,$hindex, $homeRGB); 

但是我收到一条错误消息,说imagecolorset只有5个参数,而且只有3个。结果应该打印225,225,225所以我不明白为什么它只读取1个参数而不是3.如果我手动输入225,225,225然后代码工作正常。不知道我哪里出错了?

1 个答案:

答案 0 :(得分:0)

当您尝试将PHP函数imagecolorset()作为三个独立的数据类型INTEGER参数传递rgb值时,您尝试传递数据类型为STRING的变量。

一般来说,PHP在Type Juggling时是相当宽容的,但是你can not pass a comma separated string作为一个函数参数,期望将该字符串的内容视为单独的参数。它将被视为一个参数,即使该字符串包含逗号。

而是更改函数以返回数组:

 function hex2rgb($hex) {
    $hex = str_replace("#", "", $hex);

     if(strlen($hex) == 3) {
      $r = hexdec(substr($hex,0,1).substr($hex,0,1));
      $g = hexdec(substr($hex,1,1).substr($hex,1,1));
      $b = hexdec(substr($hex,2,1).substr($hex,2,1));
    } else {
      $r = hexdec(substr($hex,0,2));
      $g = hexdec(substr($hex,2,2));
      $b = hexdec(substr($hex,4,2));
    }
    return array($r, $g, $b); // RETURN ARRAY INSTEAD OF STRING
}

然后使用它:

$homeRGB = hex2rgb($homeColour);
imagecolorset($him,$hindex, $homeRGB[0], $homeRGB[1], $homeRGB[2]); 

如果由于某种原因绝对不能或不会改变hex2rgb - 函数,则解决方法是使用call_user_func_array()

$homeRGB = hex2rgb($homeColour);
call_user_func_array('imagecolorset', array_merge(array($him, $hindex), explode(',', $homeRGB)));

不建议这样做,因为不必要的爆炸和爆炸等的开销。