| Server IP : 172.64.80.1 / Your IP : 216.73.216.175 Web Server : LiteSpeed System : Linux srv13.swhc.ca 4.18.0-553.126.2.lve.el8.x86_64 #1 SMP Thu May 28 14:12:30 UTC 2026 x86_64 User : hongluck ( 2522) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/hongluck/public_html/old site/webcal/ |
Upload File : |
<?php
/*
* $Id: gradient.php,v 1.5 2005/01/19 13:54:13 cknudsen Exp $
*
* Description:
* Generate a gradient image for use as a background image.
* Requires gd module.
*
* Input Parameters:
* height Height of output image (ignored for horizontal gradient)
* width Width of output image (ignored for vertical gradient)
* colors Number of colors to generate
* direction Direction gradient should go
* Currently limited to multiples of 90 degrees
* 0 means left-to-right, 90 means bottom-to-top,
* 180 means right-to-left, 270 means top-to-bottom
*
* Notes:
* One of the following two pairs of input parameters should be used
* to specify the colors for the gradient:
* 1. color1, color2 - End colors of gradient specified
* as "color1=RRGGBB" or "color1=RGB"
* 2. base, percent - `base' is specified the same way as
* `color1' and `color2'
* `percent' is the amount the components of `base'
* should be increased
* For example, given "base=445566&percent=50", the starting and
* ending colors of the gradient will be:
* Start:
* Red: 44 (hex) | 68 (dec)
* Green: 55 (hex) | 85 (dec)
* Blue: 66 (hex) | 102 (dec)
* End:
* Red: 44 + (50% of FF) =
* CC (hex) | 68 + (50% of 255) = 196 (dec)
* Green: 55 + (50% of FF) =
* DD (hex) | 85 + (50% of 255) = 203 (dec)
* Blue: 66 + (50% of FF) =
* EE (hex) | 102 + (50% of 255) = 230 (dec)
*
* So it is entirely equivalent to say "base=445566&percent=50" OR
* "color1=445566&color2=CCDDEE"
*
* Since this file does not use any other WebCalendar file, it could
* be used by other PHP apps.
*
* TODO:
* Allow directions which are not multiples of 90 degrees so that
* we can have diagonal gradients.
*
* Security:
* No security restrictions by user.
* Limit height and width parameters to 600 so a malicious user cannot
* request a 10Gb image 8-)
*/
$MAX_HEIGHT = 600;
$MAX_WIDTH = 600;
$MIN_COLORS = 4;
$MAX_COLORS = 256;
$DEFAULTS = array(
'colors' => 32,
'direction' => 90,
'height' => 50,
'width' => 50,
'color1' => 'ccc',
'color2' => 'eee',
'percent' => 15
);
// Get a value from a GET URL
function getGetValue ( $name ) {
if ( isset ( $_GET[$name] ) ) {
return $_GET[$name];
}
if ( ! isset ( $HTTP_GET_VARS ) ) {
return null;
}
if ( ! isset ( $HTTP_GET_VARS[$name] ) ) {
return null;
}
return ( $HTTP_GET_VARS[$name] );
}
/*
* Turn an HTML color (like 'AABBCC') into an array of decimal RGB values
*
* Parameters:
* $color - HTML color specification in 'RRGGBB' or 'RGB' format
*
* Return value:
* array('red' => $red_val, 'green' => $green_val, 'blue' => $blue_val)
*/
function colorToRGB ( $color ) {
if ( strlen ( $color ) == 6 ) {
$red = hexdec ( substr ( $color, 0, 2 ) );
$green = hexdec ( substr ( $color, 2, 2 ) );
$blue = hexdec ( substr ( $color, 4, 2 ) );
} else if ( strlen ( $color ) == 3 ) {
$red_hex = substr ( $color, 0, 1 );
$red_hex .= $red_hex;
$green_hex = substr ( $color, 1, 1 );
$green_hex .= $green_hex;
$blue_hex = substr ( $color, 2, 1 );
$blue_hex .= $blue_hex;
$red = hexdec ( $red_hex );
$green = hexdec ( $green_hex );
$blue = hexdec ( $blue_hex );
} else {
// Invalid color specification
return false;
}
return array('red' => $red, 'green' => $green, 'blue' => $blue);
}
$direction = getGetValue ( 'direction' );
if ( $direction === null || ( $direction % 90 ) != 0 ) {
$direction = $DEFAULTS['direction'];
} else {
while ( $direction > 360 ) {
$direction -= 360;
}
}
if ( $direction == 90 || $direction == 270 ) {
// Vertical gradient
$height = getGetValue ( 'height' );
if ( empty ( $height ) ) {
$height = $DEFAULTS['height'];
}
if ( $height > $MAX_HEIGHT ) {
$height = $MAX_HEIGHT;
}
$width = 1;
} else {
// Horizontal gradient
$width = getGetValue ( 'width' );
if ( empty ( $width ) ) {
$width = $DEFAULTS['width'];
}
if ( $width > $MAX_WIDTH ) {
$width = $MAX_WIDTH;
}
$height = 1;
}
$numcolors = getGetValue ( 'colors' );
if ( empty ( $numcolors ) ) {
$numcolors = $DEFAULTS['colors'];
} else {
if ( preg_match ( '/^\d+$/', $numcolors ) ) {
if ( $numcolors < $MIN_COLORS ) {
$numcolors = $MIN_COLORS;
} else if ( $numcolors > $MAX_COLORS ) {
$numcolors = $MAX_COLORS;
}
} else {
$numcolors = $DEFAULTS['colors'];
}
}
// Get colors
$base = getGetValue ( 'base' );
if ( $base === null ) {
$color1 = getGetValue ( 'color1' );
} else {
$color1 = $base;
}
if ( $color1 === null ) {
$color1 = colorToRGB ( $DEFAULTS['color1'] );
} else {
if ( preg_match ( "/^#?([0-9a-fA-F]{3,6})/", $color1, $matches ) ) {
$color1 = colorToRGB ( $matches[1] );
} else {
$color1 = colorToRGB ( $DEFAULTS['color1'] );
}
}
if ( $base === null ) {
$color2 = getGetValue ( 'color2' );
if ( $color2 === null ) {
$color2 = colorToRGB ( $DEFAULTS['color2'] );
} else {
if ( preg_match ( "/^#?([0-9a-fA-F]{3,6})/", $color2, $matches ) ) {
$color2 = colorToRGB ( $matches[1] );
} else {
$color2 = colorToRGB ( $DEFAULTS['color2'] );
}
}
} else {
$color2 = $color1;
$percent = getGetValue ( 'percent' );
if ( $percent === null || $percent < 0 || $percent > 100 ) {
$percent = $DEFAULTS['percent'];
}
$color2['red'] = min ( $color2['red'] + $percent * 255 / 100 , 255 );
$color2['green'] = min ( $color2['green'] + $percent * 255 / 100, 255 );
$color2['blue'] = min ( $color2['blue'] + $percent * 255 / 100, 255 );
}
$image = imagecreate ( $width, $height );
// Allocate array of colors
$colors = array ();
$deltared = $color2['red'] - $color1['red'];
$deltagreen = $color2['green'] - $color1['green'];
$deltablue = $color2['blue'] - $color1['blue'];
for ( $i = 0; $i < $numcolors; $i++ ) {
$thisred =
min ( $color1['red'] + ( $deltared * $i / ( $numcolors - 1 ) ), 255 );
$thisgreen =
min ( $color1['green'] + ( $deltagreen * $i / ( $numcolors - 1 ) ), 255 );
$thisblue =
min ( $color1['blue'] + ( $deltablue * $i / ( $numcolors - 1 ) ), 255 );
$thisred = floor ( $thisred );
$thisgreen = floor ( $thisgreen );
$thisblue = floor ( $thisblue );
$colors[$i] = imagecolorallocate ( $image, $thisred, $thisgreen, $thisblue );
}
switch ( $direction ) {
case 0:
$x1 = 0;
$x2 = 0;
$y1 = 0;
$y2 = $height - 1;
$dx = 1;
$dy = 0;
$dim = $width;
break;
case 90:
$x1 = 0;
$x2 = $width - 1;
$y1 = $height - 1;
$y2 = $height - 1;
$dx = 0;
$dy = -1;
$dim = $height;
break;
case 180:
$x1 = $width - 1;
$x2 = $width - 1;
$y1 = 0;
$y2 = $height - 1;
$dx = -1;
$dy = 0;
$dim = $width;
break;
case 270:
$x1 = 0;
$x2 = $width - 1;
$y1 = 0;
$y2 = 0;
$dx = 0;
$dy = 1;
$dim = $height;
break;
}
$i = 0;
while ( $x1 >= 0 && $x1 < $width
&& $x2 >= 0 && $x2 < $width
&& $y1 >= 0 && $y1 < $height
&& $y2 >= 0 && $y2 < $height ) {
// Which color for this line?
$ind = floor ( $numcolors * $i / $dim );
if ( $ind >= $numcolors ) {
$ind = $numcolors;
}
imageline ( $image, $x1, $y1, $x2, $y2, $colors[$ind] );
$x1 += $dx;
$y1 += $dy;
$x2 += $dx;
$y2 += $dy;
$i++;
}
if ( function_exists ( "imagepng" ) ) {
Header ( "Content-type: image/png" );
imagepng ( $image );
} else if ( function_exists ( "imagegif" ) ) {
Header ( "Content-type: image/gif" );
imagegif ( $image );
} else {
echo "No image formats supported!<br />\n";
}
imagedestroy ( $image );
?>