Fonctions biblio GD - La couleur affichée ne semble pas la bonne

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Fonctions biblio GD - La couleur affichée ne semble pas la bonne

Résolu !

par Zococo » 18 janv. 2009, 20:15

J'ai vérifié et le problème est bien celui-ci !

Cela m'a permis de mieux comprendre la conversion des couleurs hexa en décimal, j'avais "pompé" la formule sur internet sans trop chercher à comprendre, la couleur n'était pas mon problème à ce moment là (j'essayais péniblement de comprendre comment créer des images et en fusionner. Comme quoi on n'est jamais assez curieux !).

Donc, pour ceux que ça intéresserait, les couleurs hexa comportent des indications relatives à la proportion des 3 couleurs de base rouge, vert et bleu. Ces valeurs peuvent varier de 0 à 255 en décimal soit 00 à FF en hexa. Les deux premiers caractères de la valeur hexa correspond au canal rouge, les deux suivants au canal vert et le troisième au canal bleu.

La conversion hexa -> decimal se fait avec hexdec(valeur_hexa) appliquée à chacun des 3 segments de la valeur initiale qui sont extraits en découpant avec substr() correctement paramétrée.

Et donc ma fonction corrigée est :
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,2)); //conversion du canal vert
	$canal[2] = hexdec(substr($couleurhexa,4,2)); //conversion du canal bleu
	return $canal ;
  }
Merci à Calimero et bonne journée à tous.

Je n'ai pas vérifié

par Zococo » 18 janv. 2009, 19:32

Tu as raison, j'ai repris la fonction sans la vérifier. Je vais voir et ensuite on verra. Merci et à plus tard.

Re: Fonctions biblio GD - La couleur affichée ne semble pas

par Calimero » 18 janv. 2009, 18:13

Bonjour,
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 ;
  }
As-tu bien vérifié les valeurs attendues des paramètres des différentes fonctions utilisées dans ce bout de code ? Ne l'aurais-tu pas écrit un tout petit peu trop vite, peut-être trop en confiance avec certaines fonctions telles que substr() ? :-)

Fonctions biblio GD - La couleur affichée ne semble pas la b

par Zococo » 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 :

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 ; }
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).

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
Par avance merci !