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.

Si la imagen fue creada a partir de un archivo, solo se resuelven los colores utilizados en la imagen. Los colores presentes únicamente en la paleta no se resuelven.

Parámetros

image

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

red

Valor del componente rojo.

green

Valor del componente verde.

blue

Valor del componente azul.

Valores devueltos

Devuelve un índice de color.

Historial de cambios

Versión Descripción
8.0.0 image ahora espera una instancia de GdImage; anteriormente, se esperaba un resource gd válido.

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
1
ceo at l-i-e dot com
24 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