note 52749 added to ref.image
| From: | MichielvandeVis at osu1 dot php dot net | Date: | Wed, 11 May 2005 16:48:43 +0000 |
| Subject: | note 52749 added to ref.image | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-89267@lists.php.net to get a copy of this message | ||
Inspirated by several functions below, i wrote a function to create a gradient like in a color
picker.
----------------------------------
| COL 1 COL2|
| |
| |
| |
| |
| COL 3 COL4|
----------------------------------
That is, 4 color which "gradient" to the center of the image.
Not 100% tested, but i believe most errors are gone.
<?php
function imagegradient($x_size,
$y_size,
$left_upper="FFFFFF", $right_upper="FF0000",
$left_lower="000000", $right_lower="000000")
{
$image = imagecreatetruecolor($x_size,$y_size);
$right_upper = getColorArray($right_upper);
$left_upper = getColorArray($left_upper);
$left_lower = getColorArray($left_lower);
$right_lower = getColorArray($right_lower);
if(($x_size*$y_size)<=10000)
$size = 1;
else
$size = 5;
$left = $left_upper;
$right = $left_lower;
list($r, $g, $b) = $left;
$delta_x1 = getDeltaArray($left, $right_upper, $x_size);
$delta_x2 = getDeltaArray($right, $right_lower, $x_size);
for($i=0;$i<$x_size;$i+=$size)
{
list($r, $g, $b) = $left;
for($j=0;$j<$y_size;$j+=$size)
{
$delta_y = getDeltaArray($left, $right, $y_size);
$r = $r - ($delta_y[0]*$size);
$g = $g - ($delta_y[1]*$size);
$b = $b - ($delta_y[2]*$size);
$col = imagecolorallocate($image, round($r), round($g), round($b));
imagefilledrectangle($image, $i, $j, $i+$size, $j+$size, $col);
}
$left[0] = $left[0] - ($delta_x1[0]*$size);
$left[1] = $left[1] - ($delta_x1[1]*$size);
$left[2] = $left[2] - ($delta_x1[2]*$size);
$right[0] = $right[0] - ($delta_x2[0]*$size);
$right[1] = $right[1] - ($delta_x2[1]*$size);
$right[2] = $right[2] - ($delta_x2[2]*$size);
}
return $image;
}
function getDeltaArray($col1, $col2, $size)
{
$r_range = $col1[0] - $col2[0];
$g_range = $col1[1] - $col2[1];
$b_range = $col1[2] - $col2[2];
if($r_range<0) $r_range*=-1;
if($g_range<0) $g_range*=-1;
if($b_range<0) $b_range*=-1;
$delta_r = $r_range/$size;
$delta_g = $g_range/$size;
$delta_b = $b_range/$size;
return array($delta_r, $delta_g, $delta_b);
}
function getColorArray($col)
{
list($r, $g, $b) = sscanf($col, "%2x%2x%2x");
return array($r, $g, $b);
}
?>
----
Manual Page -- http://www.php.net/manual/en/ref.image.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+52749
Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+52749&report=yes&reason=added+to+the+manual
Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+52749&report=yes&reason=bad+code
Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+52749&report=yes&reason=spam
Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+52749&report=yes&reason=useless
Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+52749&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+52749&report=yes
Search -- http://master.php.net/manage/user-notes.php