PHP 5.4.33 Released

imagecolorresolve

(PHP 4, PHP 5)

imagecolorresolveRetourne l'index de la couleur donnée, ou la plus proche possible

Description

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

imagecolorresolve() retourne un index de couleur à tous les coups. Soit il arrive à trouver la couleur demandée dans la palette, soit il trouve la couleur la plus proche.

Si vous créez l'image depuis un fichier, seules les couleurs utilisées dans l'image seront résolues. Les couleurs uniquement présentes dans la palette ne le seront pas.

Liste de paramètres

image

Une ressource d'image, retournée par une des fonctions de création d'images, comme imagecreatetruecolor().

red

Valeur du composant rouge.

green

Valeur du composant vert.

blue

Valeur du composant bleu.

Valeurs de retour

Retourne un index de couleur.

Exemples

Exemple #1 Exemple avec imagecoloresolve() pour récupérer les couleurs d'une image

<?php
// Chargement d'une image
$im imagecreatefromgif('phplogo.gif');

// Récupération des couleurs les plus proches de l'image
$colors = array();
$colors[] = imagecolorresolve($im255255255);
$colors[] = imagecolorresolve($im00200)

// Affichage
print_r($colors);

imagedestroy($im);
?>

L'exemple ci-dessus va afficher quelque chose de similaire à :

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

Voir aussi

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