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

Ответить
mkden
Сообщения: 96
Зарегистрирован: 08.05.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
Администратор
Сообщения: 1606
Зарегистрирован: 28.12.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)==3 ) {
       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.05.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 я нуб!!! )

Ответить