Fonctions biblio GD - La couleur affichée ne semble pas la b
Posté : 18 janv. 2009, 17:30
Bonjour,
Je m'initie à la création d'images avec la bibliothèque GD. J'ai récupéré des bouts de code à droite et à gauche et j'ai cru comprendre que pour utiliser une couleur il faut partir de la valeur hexa, la répartir en 3 canaux et l'affecter par imagecolorallocate. J'avais besoin d'une image en N&B et tout va bien.
J'ai voulu mettre de la couleur et là rien ne va plus : le code hexa ne donne pas la couleur voulue (je voulais du jaune, j'ai eu du rouge).
Je suis parti d'une palette de couleurs trouvée sur internet (http://www.espace2001.com/espace/couleurs.php) puis, en raison de l'échec, à partir de GIMP qui permet de connaître le code d'une couleur. Alors soit je n'ai pas les bons codes (et où trouver la palette adaptée ?) soit il y a un bug ailleurs. Pouvez-vous m'aider ?
Je développe sous Xampp avec Linux Ubuntu. Mon code :
Une fonction pour transformer un code hexa en tableau avec 3 canaux :
Puis on utilise le tout pour créer une image de 336 x 372, l'afficher et l'enregistrer (ça fonctionne très bien sauf la couleur).
Par avance merci !
Je m'initie à la création d'images avec la bibliothèque GD. J'ai récupéré des bouts de code à droite et à gauche et j'ai cru comprendre que pour utiliser une couleur il faut partir de la valeur hexa, la répartir en 3 canaux et l'affecter par imagecolorallocate. J'avais besoin d'une image en N&B et tout va bien.
J'ai voulu mettre de la couleur et là rien ne va plus : le code hexa ne donne pas la couleur voulue (je voulais du jaune, j'ai eu du rouge).
Je suis parti d'une palette de couleurs trouvée sur internet (http://www.espace2001.com/espace/couleurs.php) puis, en raison de l'échec, à partir de GIMP qui permet de connaître le code d'une couleur. Alors soit je n'ai pas les bons codes (et où trouver la palette adaptée ?) soit il y a un bug ailleurs. Pouvez-vous m'aider ?
Je développe sous Xampp avec Linux Ubuntu. Mon code :
Une fonction pour transformer un code hexa en tableau avec 3 canaux :
Code : Tout sélectionner
function troiscanaux ($couleurhexa)
{
/*===============================================================
| |
| On transforme la couleur hexa en valeurs sur 3 canaux |
| |
===============================================================*/
$canal[0] = hexdec(substr($couleurhexa,0,2)); //conversion du canal rouge
$canal[1] = hexdec(substr($couleurhexa,2,4)); //conversion du canal vert
$canal[2] = hexdec(substr($couleurhexa,4,6)); //conversion du canal bleu
return $canal ;
}
Code : Tout sélectionner
header("Content-type: image/png"); //format png - pour afficher directement dans le navigateur l'image créée
Include ('fonctions.php');// Je mets mes fonctions dans un autre fichier
//Les paramètres de base
$x = 336; //largeur de mon image en PIXELS
$y = 372; //hauteur de mon image en PIXELS
$couleur_fond = "OOOOOO";//couleur du fond de l'image
$couleur_bande = "E3FF0D"; // Couleur de la bande
$fich_image = 'pellic.png'; //Nom de l'Image
//======================= Création d'une image toute noire ===========================
// On définit les paramètres de la couleur de remplissage
$encres = troiscanaux($couleur_fond);
// on créé l'image en vraies couleurs
$image = imagecreatetruecolor($x,$y);
// on créé la couleur et on l'attribue à une variable pour ne pas la perdre
$couleur = imagecolorallocate($image,$encres[0],$encres[1],$encres[2]);
//on remplit l'image
imagefill($image,0,0,$couleur);
//================= On trace la ligne du haut =====================================================
// C'est là que je rencontre le bug mais il est peut-être plus haut
$couleur_3cnx = troiscanaux($couleur_bande);
$couleur_courante = imagecolorallocate($image,$couleur_3cnx[0],$couleur_3cnx[1],$couleur_3cnx[2]);
$x_ligne_orig = 0 ;
$x_ligne_fin = $x ;
$y_ligne_orig = 50
$y_ligne_fin = 50 ;
imageline($image,$x_ligne_orig,$y_ligne_orig,$x_ligne_fin,$y_ligne_fin, $couleur_courante); //Et donc ça c'est rouge au lieu d'être jaune ??
//=========================== On termine ========================================================
imagepng($image); //renvoie une image sous format png
imagepng($image, $fich_image); //enregistre l'image dans le répertoire images à la racine du site.
imagedestroy($image); //détruit l'image, libérant ainsi de la mémoire