2009-12-10 2 views
1

Нижеприведенная функция предназначена для ввода входного шестнадцатеричного кода (с префиксом «#» или без него) и применить обновление цвета к части изображения между startPixel и endPixel.Преобразование Hex в RGB для функции imagegif

Я могу заставить эту функцию нормально работать при локальных тестах, когда (1) снабжает красный, зеленый, синий и (2) запуск файла непосредственно в качестве автономного (т. Е. Просто сохранение содержимого функции в файл и его выполнение).

Однако у меня есть две проблемы, которые я не могу решить. (1) Мне нужно передать шестнадцатеричный код и заставить работать эту функцию, не требуя жестких кодов rgb, и (2) Мне нужна функция для работы внутри моего файла functions.php в wordpress при сохранении моих параметров темы. Я получаю сообщение об ошибке «не удалось открыть поток» при каждом вызове функции при сохранении.

`Функция:

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'); 

`

ответ

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 разрешений в файле, который вы пытаетесь записать.

+0

Спасибо, Джон, я все еще становлюсь черным из шестнадцатеричного преобразования. Как можно отбросить возвращаемые значения из функции? –

+0

Как вы называете hexToRGB? –

+0

ОК, когда я использую var_dump (hexToRGB («cccccc»)), он возвращает то, что кажется правильным набором результатов ... массив (3) {["red"] => int (204) ["green" ] => int (204) ["blue"] => int (204)} Тем не менее, я все еще становлюсь черным от преобразования цвета пятна. Не уверен, что моя функция set_image_color выполняет правильное преобразование rgb. Можете ли вы посмотреть на функцию set_theme_color и сообщить мне, что мне не хватает? –

Смежные вопросы