PHP 8.5.0 Alpha 2 available for testing

imagecolorresolve

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

imagecolorresolveDevuelve el índice de la color dada, o la más cercana posible

Descripción

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

imagecolorresolve() devuelve un índice de color en todos los casos. O bien encuentra la color solicitada en la paleta, o bien encuentra la color más cercana.

If you created the image from a file, only colors used in the image are resolved. Colors present only in the palette are not resolved.

Parámetros

image

Un objeto GdImage, retornado por una de las funciones de creación de imágenes, como imagecreatetruecolor().

red

Value of red component.

green

Value of green component.

blue

Value of blue component.

Valores devueltos

Devuelve un índice de color.

Historial de cambios

Versión Descripción
8.0.0 image expects a GdImage instance now; previously, a valid gd resource was expected.

Ejemplos

Ejemplo #1 Ejemplo con imagecoloresolve() para obtener las colores de una imagen

<?php
// Carga de una imagen
$im = imagecreatefromgif('phplogo.gif');

// Obtención de las colores más cercanas de la imagen
$colors = array();
$colors[] = imagecolorresolve($im, 255, 255, 255);
$colors[] = imagecolorresolve($im, 0, 0, 200)

// Mostrar
print_r($colors);
?>

Resultado del ejemplo anterior es similar a :

Array
(
    [0] => 89
    [1] => 85
)

Ver también

add a note

User Contributed Notes 1 note

up
0
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