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);
}
imagecolorresolve
(PHP 4, PHP 5)
imagecolorresolve — Devuelve el índice del color especificado o su posible alternativa más cercana
Descripción
int imagecolorresolve
( resource $im
, int $red
, int $green
, int $blue
)
Esta función garantiza que se devuelva el índice de color para un color solicitado, ya que devuelve el color exacto o el color alternativo más próximo al color solicitado.
Si se emplea una imagen creada a partir de un archivo, solamente se resuelven los colores usados en la imagen. Los colores que se encuentran exclusivamente en la paleta de la imagen no se resuelven.
Vea también imagecolorclosest().
imagecolorresolve
ceo at l-i-e dot com
03-Jan-2002 12:55
03-Jan-2002 12:55
