A way to get each time an answer :
<?php
function imagegetcolor($im, $r, $g, $b) {
$c=imagecolorexact($im, $r, $g, $b);
if ($c!=-1) return $c;
$c=imagecolorallocate($im, $r, $g, $b);
if ($c!=-1) return $c;
return imagecolorclosest($im, $r, $g, $b);
}
?>
If the *exact* color is found in the image, it will be returned. If we don't have the exact color, we try to allocate it. If we can't allocate it, we return the closest color in the image.
imagecolorclosest
(PHP 4, PHP 5)
imagecolorclosest — Retourne l'index de la couleur la plus proche d'une couleur donnée
Description
Retourne l'index de la couleur de la palette qui est la plus proche de la valeur RGB passée.
La "distance" entre la couleur souhaitée et les couleurs de la palette est calculée en considérant l'espace RGB comme un espace à 3 dimensions.
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 seront pas résolues.
Liste de paramètres
- image
-
Une ressource d'image, retourné 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.
Les paramètres sur les couleurs sont des entiers compris entre 0 et 255 ou des hexadécimaux compris entre 0x00 et 0xFF.
Valeurs de retour
Retourne l'index de la couleur la plus proche, dans la palette de l'image, de celle donnée.
Exemples
Exemple #1 Recherche d'un jeu de couleur dans une image
<?php
// On commence avec une image et on la convertie en une palette de couleurs
$im = imagecreatefrompng('figures/imagecolorclosest.png');
imagetruecolortopalette($im, false, 255);
// Couleurs recherchées (RVB)
$colors = array(
array(254, 145, 154),
array(153, 145, 188),
array(153, 90, 145),
array(255, 137, 92)
);
// On boucle sur chaque recherche et on trouve la couleur de la palette la plus proche.
// Retourne le numéro de la recherche, le RVB cherché et la correspondance en RVB
foreach($colors as $id => $rgb)
{
$result = imagecolorclosest($im, $rgb[0], $rgb[1], $rgb[2]);
$result = imagecolorsforindex($im, $result);
$result = "({$result['red']}, {$result['green']}, {$result['blue']})";
echo "#$id: Recherche ($rgb[0], $rgb[1], $rgb[2]); Correspondance : $result.\n";
}
imagedestroy($im);
?>
L'exemple ci-dessus va afficher quelque chose de similaire à :
#0: Recherche (254, 145, 154); Correspondance : (252, 150, 148). #1: Recherche (153, 145, 188); Correspondance : (148, 150, 196). #2: Recherche (153, 90, 145); Correspondance : (148, 90, 156). #3: Recherche (255, 137, 92); Correspondance : (252, 150, 92).
Voir aussi
- imagecolorexact() - Retourne l'index de la couleur donnée
- imagecolorclosestalpha() - Retourne la couleur la plus proche, en tenant compte du canal alpha
- imagecolorclosesthwb() - Lit l'index de la couleur spécifiée avec sa teinte, blanc et noir
imagecolorclosest
28-Jun-2005 03:22
11-Oct-2003 05:10
This functuion is useful when you are dealing with previously present images like .png, .jpg, etc. You can use this function for writing a text on the image.
For me the function imagecolorallocate() was returning the -1 value. after lot of RnD and site search i found a function use of imagecolorclosest(). This solved my problem of writing the text on the image with customised color.
Actually previously it was writing on the image but the color was not distinct. It was using the same color as of that background image.
The following code segment was fine with me.
header ("Content-type: image/jpeg");
$im = imagecreatefromjpeg("BlankButton.jpg");
$white = imageColorClosest($im, 255,255,255);
// this is for TTF fonts
imagettftext ($im, 20, 0, 16, 30, $white, "/usr/X11R6/lib/X11/fonts/TTF/luximb.ttf", "Vikrant");
//this is for notmal font
imagestring($im, 4, 0,0,"Korde", $white);
imagejpeg($im,"",150);
imagedestroy ($im);
