以下功能用于输入十六进制输入(带或不带“#”前缀),并将颜色更新应用于startPixel和endPixel之间的图像部分。
我可以在(1)提供红色,绿色,蓝色和(2)直接运行文件时(或者只是将函数的内容保存到文件中),以便在localhost测试中使该函数正常工作。执行它)。
然而,我有两个问题似乎无法解决。 (1)我需要传入一个十六进制并使函数工作而不需要rgb硬代码和(2)我需要该函数在wordpress中的functions.php文件中工作,同时保存我的主题选项。每次我尝试在保存时调用该函数时,我都会收到“无法打开流”错误。
`功能:
function set_theme_color($hex)
{
//hexToRGB($hex); DOES NOT WORK. ALWAYS RETURNS BLACK
$token = "images/sidebar-bg";
$red = 0;
$green = 0;
$blue = 202;
$startPixel = 601;
$endPixel = 760;
$img = imagecreatefromgif('images/sidebar-bg.gif');
$color = imagecolorallocate($img, $red, $green, $blue);
for ($i = $startPixel-1; $i < $endPixel; $i++)
{
imagesetpixel($img, $i, 0, $color);
}
imagegif($img, $token.'.gif');
}
function hexToRGB ($hexColor)
{
$output = array();
$output['red'] = hexdec($hexColor[0].$hexColor[1]);
$output['green'] = hexdec($hexColor[2].$hexColor[3]);
$output['blue'] = hexdec($hexColor[4].$hexColor[5]);
return $output;
}
set_theme_color('#cccccc');
`
答案 0 :(得分:2)
您的hexToRGB功能不考虑#符号的可能性。为了解析颜色代码,我使用正则表达式:
function hexToRGB ($hexColor)
{
if( preg_match( '/^#?([a-h0-9]{2})([a-h0-9]{2})([a-h0-9]{2})$/i', $hexColor, $matches ) )
{
return array(
'red' => hexdec( $matches[ 1 ] ),
'green' => hexdec( $matches[ 2 ] ),
'blue' => hexdec( $matches[ 3 ] )
);
}
else
{
return array( 0, 0, 0 );
}
}
您无法打开流错误很可能是由于文件权限造成的。确保在您尝试写入的文件上授予权限模式777。