imagecolorresolve

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

imagecolorresolveObtém o índice da cor especificada ou a alternativa mais próxima

Descrição

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

Esta função garantidamente retorna um índice para uma cor solicitada, pode ser a cor exata ou a cor mais alternativa mais próxima.

Se a imagem foi criada a partir de um arquivo, apenas as cores usadas na imagem são resolvidas. As cores presentes apenas na paleta não serão resolvidas.

Parâmetros

image

Um objeto GdImage, retornado por uma das funções de criação de imagem, como imagecreatetruecolor().

red

Valor do componente vermelho.

green

Valor do componente verde.

blue

Valor do componente azul.

Valor Retornado

Retorna um índice de cor.

Registro de Alterações

Versão Descrição
8.0.0 O parâmetro image agora espera uma instância de GdImage; anteriormente, um resource gd válido era esperado.

Exemplos

Exemplo #1 Usando imagecoloresolve() para obter cores de uma imagem

<?php
// Carrega uma imagem
$im = imagecreatefromgif('phplogo.gif');

// Obtém as cores mais próximas da imagem
$colors = array();
$colors[] = imagecolorresolve($im, 255, 255, 255);
$colors[] = imagecolorresolve($im, 0, 0, 200);

// Saída
print_r($colors);

imagedestroy($im);
?>

O exemplo acima produzirá algo semelhante a:

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

Veja Também

add a note add a note

User Contributed Notes 1 note

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