好的,所以有時獲得您想要的確切顏色非常重要,只是它不在影像中,而 ImageColorResolve 並不夠「接近」。
以下程式碼是一個非常糟糕的駭客行為,速度很慢,但它確實可以做到這一點。
$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("需要黑色:即將移除 $goner ($rgb[red], $rgb[green], $rgb[blue]),該顏色僅在 $colorcount[$goner] 個像素中使用", 0);
unset($colorcount[$goner]);
imagecolordeallocate($jpg, $goner);
$black = imagecolorallocate($jpg, 0, 0, 0);
}
if ($black == -1){
$black = imagecolorresolve($jpg, 0, 0, 0);
#error_log("糟糕!仍然無法配置顏色!", 0);
}