<?php
/**
* duotone_image
*
* Change an image into a tinted grayscale.
*
* @version 0.5
* @author Contributors at eXorithm
* @link /algorithm/view/duotone_image Listing at eXorithm
* @link /algorithm/history/duotone_image History at eXorithm
* @license /home/show/license
*
* @param resource $image (GD image) The image to duotone.
* @param number $rplus Red value to increase or decrease.
* @param number $gplus Green value to increase or decrease.
* @param number $bplus Blue value to increase or decrease.
* @param bool $pcnt If checked, the values for rplus, gplus and bplus will be treated as percentages.
* @return resource GD image
*/
function duotone_image($image=null,$rplus=0,$gplus=0,$bplus=60,$pcnt=false)
{
// Adapted from http://www.tuxradar.com/practicalphp/11/2/21
$imagex = imagesx($image);
$imagey = imagesy($image);
$image2 = imagecreatetruecolor($imagex, $imagey);
imagesavealpha($image2, true);
imagealphablending($image2, false);
for ($x = 0; $x <$imagex; ++$x) {
for ($y = 0; $y <$imagey; ++$y) {
$rgb = imagecolorat($image, $x, $y);
$color = imagecolorsforindex($image, $rgb);
$grey = floor(($color['red']+$color['green']+$color['blue'])/3);
if ($pcnt) {
$red = $grey + $grey*($rplus/150);
$green = $grey + $grey*($gplus/150);
$blue = $grey + $grey*($bplus/150);
} else {
$red = $grey + $rplus;
$green = $grey + $gplus;
$blue = $grey + $bplus;
}
if ($red > 255) $red = 255;
if ($green > 255) $green = 255;
if ($blue > 255) $blue = 255;
if ($red < 0) $red = 0;
if ($green < 0) $green = 0;
if ($blue < 0) $blue = 0;
$newcol = imagecolorallocatealpha($image2, $red,$green,$blue,$color['alpha']);
imagesetpixel ($image2, $x, $y, $newcol);
}
}
return $image2;
}
?>