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 — Belirtilen rengin veya en yakın benzerinin indisini döndürür
Açıklama
int imagecolorresolve
( resource $resim
, int $kırmızı
, int $yeşil
, int $mavi
)
Bu işlev, belirtilen rengin kendisinin veya en yakın benzerinin indisini döndürür.
Eğer resmi bir dosyadan oluşturmuşsanız sadece resimde kullanılan renkler çözümlenir. Palette bulunan renklerden resimde kullanılmamış olanlar çözümlenmez.
Değiştirgeler
- resim
-
imagecreatetruecolor() gibi bir resim oluşturma işlevinden dönen bir resim verisi.
- kırmızı
-
Rengin kırmızı bileşeninin değeri.
- yeşil
-
Rengin yeşil bileşeninin değeri.
- mavi
-
Rengin mavi bileşeninin değeri.
Dönen Değerler
Bir renk indisi döndürür.
Örnekler
Örnek 1 - Bir resimdeki renkleri öğrenmek için imagecoloresolve() kullanımı
<?php
// Bir resim yükleyelim
$im = imagecreatefromgif('http://docs.php.net/images/php.gif');
// Resimden en yakın renkleri alalım
$colors = array();
$colors[] = imagecolorresolve($im, 255, 255, 255, 0);
$colors[] = imagecolorresolve($im, 0, 0, 200, 127);
// Sonucu çıktılayalım
print_r($colors);
imagedestroy($im);
?>
Yukarıdaki örnek şuna benzer bir çıktı üretir:
Array
(
[0] => 89
[1] => 85
)
imagecolorresolve
ceo at l-i-e dot com
03-Jan-2002 11:55
03-Jan-2002 11:55
