SunshinePHP Developer Conference 2015

imagecolorresolve

(PHP 4, PHP 5)

imagecolorresolveObtener el índice del color especificado o su alternativa más próxima posible

Descripción

int imagecolorresolve ( resource $image , int $red , int $green , int $blue )

Está función garantiza la devolución de un índice de color para un color requerido, el color exacto o la alternativa más próxima posible.

Si se ha creado la imagen a partir de un fichero, sólo se resolverán los colores utilizados en la imagen. No se resolverán los colores que sólo están presentes en la paleta.

Parámetros

image

Un recurso image, es devuelto 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.

Ejemplos

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

<?php
// Cargar un imagen
$im imagecreatefromgif('phplogo.gif');

// Obtener los colores más próximos de la imagen
$colores = array();
$colores[] = imagecolorresolve($im255255255);
$colores[] = imagecolorresolve($im00200);

// Imprimir
print_r($colores);

imagedestroy($im);
?>

El resultado del ejemplo sería algo similar a:

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

Ver también

add a note add a note

User Contributed Notes 1 note

up
0
ceo at l-i-e dot com
12 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