将Hex转换为RGB以获得imagegif功能

时间:2009-12-10 14:12:04

标签: php

以下功能用于输入十六进制输入(带或不带“#”前缀),并将颜色更新应用于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');

`

1 个答案:

答案 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。