<?php
# NEW STUFF, NOT DOCUMENTED
/* PIMG module: handles colors */
class pimg_color
{
/* Resources */
private $pimg;
private $red = 0;
private $green = 0;
private $blue = 0;
private $alpha = 0;
// PIMG constructor
function __construct($pimg)
{
$this -> pimg = $pimg;
}
/*
Creates a color
@param: $red - the red RGBA amount (0 - 255)
@param: $green - the green RGBA amount (0 - 255)
@param: $blue - the blue RGBA amount (0 - 255)
@param: $alpha - the alpha RGBA amount (0 - 127)
@result: pimg_color resource
*/
function init($red = null, $green = null, $blue = null, $alpha = null)
{
/* INPUT VALIDATORS */
$red = (int) $red;
if ($red < 0 || $red > 255)
{
$red = abs($red) % 255;
$this -> pimg -> setDebug('Red channel must be 0-255, using closest value of ' . $red, 'notice', __CLASS__);
}
$green = (int) $green;
if ($green < 0 || $green > 255)
{
$green = abs($green) % 255;
$this -> pimg -> setDebug('Green channel must be 0-255, using closest value of ' . $green, 'notice', __CLASS__);
}
$blue = (int) $blue;
if ($blue < 0 || $blue > 255)
{
$blue = abs($blue) % 255;
$this -> pimg -> setDebug('Blue channel must be 0-255, using closest value of ' . $blue, 'notice', __CLASS__);
}
$alpha = (int) $alpha;
if ($alpha < 0 || $alpha > 127)
{
$alpha = abs($alpha) % 127;
$this -> pimg -> setDebug('Alpha channel must be 0-127, using closest value of ' . $alpha, 'notice', __CLASS__);
}
// Get colors
$this -> red = $red;
$this -> green = $green;
$this -> blue = $blue;
$this -> alpha = $alpha;
// Return an instance of the class
return $this;
}
/*
If the user wants to view the color for debugging this method will return a string representation of the RGBA color
@result: string color
*/
function __toString()
{
return 'red: ' . $this -> red . ', green: ' . $this -> green . ', blue: ' . $this -> blue . ', alpha: ' . $this -> alpha;
}
/*
Sets or gets the red color value
@param: $red
@result: color handle or red value
*/
public function red($red = null)
{
if (isset($red))
{
$this -> red = $red;
return $this;
}
else
return $this -> red;
}
/*
Sets or gets the green color value
@param: $green
@result: color handle or green value
*/
public function green($green = null)
{
if (isset($green))
{
$this -> green = $green;
return $this;
}
else
return $this -> green;
}
/*
Sets or gets the blue color value
@param: $blue
@result: color handle or blue value
*/
public function blue($blue = null)
{
if (isset($blue))
{
$this -> blue = $blue;
return $this;
}
else
return $this -> blue;
}
/*
Sets or gets the alpha color value
@param: $alpha
@result: color handle or alpha value
*/
public function alpha($alpha = null)
{
if (isset($alpha))
{
$this -> alpha = $alpha;
return $this;
}
else
return $this -> alpha;
}
/*
Allocates the color for the parent PIMG
@result: valid allocated image color
*/
public function allocate()
{
return imagecolorallocatealpha($this -> pimg -> handle(), $this -> red, $this -> green, $this -> blue, $this -> alpha);
}
/*
Mixes two or more colors and sets the current to the result
@param: $colors - an array with arrays containing a valid pimg_color color as first and amount if mixing as second argument
@result: pimg_color resource
*/
public function mix($colors)
{
// Reset the color to black
$this -> red = $this -> green = $this -> blue = $this -> alpha = 0;
$totalAmount = 0;
// Go through all colors
if (is_array($colors))
{
foreach($colors as $color)
{
$this -> red += $color[0] -> red() * $color[1] / 100;
$this -> green += $color[0] -> green() * $color[1] / 100;
$this -> blue += $color[0] -> blue() * $color[1] / 100;
$this -> alpha += $color[0] -> alpha() * $color[1] / 100;
$totalAmount += $color[1];
}
if ($totalAmount <> 100)
$this -> pimg -> setDebug('The total color mix amount is <b>' . $totalAmount . '</b>, but should be exactly <b>100</b>!', 'error', __CLASS__);
$this -> red = round($this -> red);
$this -> green = round($this -> green);
$this -> blue = round($this -> blue);
$this -> alpha = round($this -> alpha);
// Return a color class instance
return $this;
} else
$this -> pimg -> setDebug('There are no valid colors to mix', 'error', __CLASS__);
}
}
?>
|