(PHP 4, PHP 5, PHP 7, PHP 8)
imagecolorresolve — Получает идентификатор конкретного цвета или его ближайший аналог
Функция обязательно вернёт идентификатор выбранного цвета или его ближайшую возможную альтернативу.
В изображениях, которые создали из файла, функция распознаёт только цвета самого рисунка, поэтому игнорирует цвета, которые содержит палитра, но не включает изображение.
imageredЗначение красного компонента цвета.
greenЗначение зелёного компонента цвета.
blueЗначение синего компонента цвета.
Возвращает цветовой идентификатор.
| Версия | Описание |
|---|---|
| 8.0.0 |
Параметр image теперь принимает объект GdImage ;
раньше параметр принимал корректный gd-ресурс (resource ).
|
Пример #1 Пример получения цветов из изображения функцией imagecoloresolve()
<?php
// Загрузить изображение
$im = imagecreatefromgif('phplogo.gif');
// Получить ближайшие цвета на изображении
$colors = array();
$colors[] = imagecolorresolve($im, 255, 255, 255);
$colors[] = imagecolorresolve($im, 0, 0, 200);
// Вывод
print_r($colors);
?>Вывод приведённого примера будет похож на:
Array ( [0] => 89 [1] => 85 )
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);
}