gd gradient php и цвета вида 0x000000?

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
Делаю изображение средствами php

Код: Выделить всё

header('Content-type: image/png');

$width=400;
$height=20;


// сверху, к примеру, будет чёрный
$redTop = 0;
$greenTop = 0;
$blueTop = 0;
// внизу, к примеру, будет белый
$redBottom = 255;
$greenBottom = 255;
$blueBottom = 255;
// $width, $height -  соответственно ширина и высота картинки
$im = imagecreatetruecolor ($width, $height);
for ($y = 0; $y < $height; $y++)
{
   $red = round ($redTop + ($redBottom - $redTop) * $y / ($height - 1));
   $green = round ($greenTop + ($greenBottom - $greenTop) * $y / ($height - 1));
   $blue = round ($blueTop + ($blueBottom - $blueTop) * $y / ($height - 1));
   $color = imagecolorallocate ($im, $red, $green, $blue);
   imageline ($im, 0, $y, $width - 1, $y, $color);
}     


imagepng($im);
ImageDestroy ($im);



Все прекрасно работает ,но проблемма в следующем скрипт понимает только RGB цвета .
Как заставить его понимать цвета типа 0x000000?

Зделал так

Код: Выделить всё

$image_width = 400;
$image_height = 20;

# Makes a picture and sets size in pixels 
$image  = imagecreatetruecolor($image_width, $image_height); 



#Horizontal gradient
for($i=0; $i<$image_height; $i++) 

$color = floor($i * 220 / $image_height);
$color = ImageColorAllocate($image, 0xFF0000,$color,0x8A2BE2);
imageline($image, 0, $i, $image_width, $i, $color);


# Prints out all the figures and picture and frees memory 
header('Content-type: image/png'); 
ImagePNG($image); 
imagedestroy($image);


но все равно видит только 0x8A2BE2!?
p.s: В php я нуб!!! )

Аватара пользователя
Distructor
Администратор
Сообщения: 1599
Зарегистрирован: 28 дек 2009
внимательнее читай документацию. допускается

Код: Выделить всё

$black = imagecolorallocate($im, 0x00, 0x00, 0x00);
т.е. задание все тех же R, G, B но в шестнадцатиричном виде

для удобного указания html цвета можно использовать что-то вроде

Код: Выделить всё

...
$color = my_imagecolorallocate ($im, 'FF0000');
...

function my_imagecolorallocate ($im, $color) {
    $colors = html2rgb($color);
    if ( is_array($colors) && count($colors)==) {
       list($red, $green, $blue) = html2rgb($color);
       return imagecolorallocate ($im, $red, $green, $blue);
    }
    return false;
}

function html2rgb($color)
{
    if ($color[0] == '#')
        $color = substr($color, 1);

    if (strlen($color) == 6)
        list($r, $g, $b) = array($color[0].$color[1], $color[2].$color[3], $color[4].$color[5]);
    elseif (strlen($color) == 3)
        list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
    else
        return false
;
    $r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
    return array($r, $g, $b);
}

mkden
Сообщения: 96
Зарегистрирован: 08 май 2010
фух сделал

Код: Выделить всё

function imagecolorgradient($im, $x1, $y1, $height, $width,
    $up_color, $down_color)
{
    $color0=($up_color[0]-$down_color[0])/$height;
    $color1=($up_color[1]-$down_color[1])/$height;
    $color2=($up_color[2]-$down_color[2])/$height;
    for ($i=0;$i<=$height;$i++)
    {
        $red=$up_color[0]-floor($i*$color0);
        $green=$up_color[1]-floor($i*$color1);
        $blue=$up_color[2]-floor($i*$color2);
        $col= imagecolorallocate($im, $red, $green, $blue);
        imageline($im, $y1, $x1+$i, $y1+$width, $x1+$i, $col);
    }
}




function html2rgb($color)
{
    if ($color[0] == '#')
        $color = substr($color, 1);

    if (strlen($color) == 6)
        list($r, $g, $b) = array($color[0].$color[1],
                                 $color[2].$color[3],
                                 $color[4].$color[5]);
    elseif (strlen($color) == 3)
        list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
    else
        return false;

    $r = hexdec($r); $g = hexdec($g); $b = hexdec($b);

    return array($r, $g, $b);
}






$height = 20;
$width = 400;

$up_color = html2rgb('8B0000');
$down_color = html2rgb('00FF00');


$im = imagecreatetruecolor($width, $height);
imagecolorgradient($im, 0, 0, $height, $width, $up_color, $down_color);
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);



кстате твой код не работает ошибка в этой строке

Код: Выделить всё

$colors = html2rgb($color);
p.s: В php я нуб!!! )


Вернуться в «Вопросы по программированию»