我有一个图像,我想根据变量设置的颜色更改颜色。我遇到的问题是,值来自数据源为十六进制,而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然后代码工作正常。不知道我哪里出错了?
答案 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)));
不建议这样做,因为不必要的爆炸和爆炸等的开销。