PHP 8.4.3 Released!

imagecolorresolve

(PHP 4, PHP 5, PHP 7, PHP 8)

imagecolorresolveПолучает идентификатор конкретного цвета или его ближайший аналог

Описание

imagecolorresolve(
    GdImage $image,
    int $red,
    int $green,
    int $blue
): int

Функция обязательно вернёт идентификатор выбранного цвета или его ближайшую возможную альтернативу.

Функция распознает только цвета изображения, если изображение создали из файла. Функция не распознает цвета, которые используются только в палитре.

Список параметров

image

Объект GdImage, который возвращает одна из функций, создающих изображения, например, imagecreatetruecolor().

red

Значение красного компонента цвета.

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
)

Смотрите также

Добавить

Примечания пользователей 1 note

up
1
ceo at l-i-e dot com
23 years ago
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);
}
To Top