note 52749 deleted from ref.image by tularis
| From: | tularis@php.net | Date: | Sun, 29 Jun 2008 21:07:44 +0000 |
| Subject: | note 52749 deleted from ref.image by tularis | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-140947@lists.php.net to get a copy of this message | ||
Note Submitter: Michiel van de Vis
----
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);
}
?>