note 17924 added to function.imagecolorresolve
| From: | ceo at l-i-e dot com | Date: | Thu, 03 Jan 2002 08:55:32 +0000 |
| Subject: | note 17924 added to function.imagecolorresolve | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-24364@lists.php.net to get a copy of this message | ||
Okay, so sometimes it's really IMPORTANT to get the exact color you want, only it's not
*IN* the Image, and ImageColorResolve just isn't "close enough".
The following code is a disgustingly gross hack, rather slow, but it does that.
$colorcount = array();
for ($x = 0; $x < $width; $x++){
for ($y = 0; $y < $height; $y++){
$colorindex = imagecolorat($jpg, $x, $y);
if (!isset($colorcount[$colorindex])){
$colorcount[$colorindex] = 1;
}
else{
$colorcount[$colorindex]++;
}
}
}
asort($colorcount);
reset($colorcount);
$black = imagecolorexact($jpg, 0, 0, 0);
if ($black == -1){
$goner = key($colorcount);
$rgb = imagecolorsforindex($jpg, $goner);
#error_log("Need black: About to kill $goner ($rgb[red], $rgb[green], $rgb[blue]) which was
only used in $colorcount[$goner] pixels", 0);
unset($colorcount[$goner]);
imagecolordeallocate($jpg, $goner);
$black = imagecolorallocate($jpg, 0, 0, 0);
}
if ($black == -1){
$black = imagecolorresolve($jpg, 0, 0, 0);
#error_log("Damn! STILL couldn't allocate the color!", 0);
}
--
http://www.php.net/manual/en/function.imagecolorresolve.php
http://master.php.net/manage/user-notes.php?action=edit+17924
http://master.php.net/manage/user-notes.php?action=delete+17924
http://master.php.net/manage/user-notes.php?action=reject+17924