Librairie GD + Transparence...

Librairie GD + Transparence... - PHP - Programmation

Marsh Posté le 15-09-2005 à 18:50:55    

Alors voila, je voudrais réaliser en PHP, une code qui génère une image (de type... je m'en fous.. mais du moment que ça marche), qui correspondrait à une note.
 
Pour réaliser cette image dynamique, j'ai décidé de la faire en deux parties :  
 - un fond coloré (2 couleurs);
 - un motif copié 10 fois (la note est sur 10)
 
Pour le fond, j'ai procedé de la manière suivante :  

Code :
  1. $im = ImageCreateTrueColor($w_img, $h_img);
  2. $fond = ImageColorAllocate($im, 255, 255, 255);
  3. $enabled = ImageColorAllocate($im, 50, 200, 150);
  4. $disabled = ImageColorAllocate($im, 10, 150, 10);
  5. ImageFilledRectangle ($im, 0, 0, $note * $w_img / 10, $h_img, $enabled);
  6. ImageFilledRectangle ($im, $note * $w_img / 10, 0, $w_img, $h_img, $disabled);


 
J'obtient donc 2 rectangles de couleurs et de taille différentes (la largeur dépends de la note).
 
Pour une note de 5 / 10, voici le résultat :
http://rclsilver.free.fr/fond.gif
 
Pour le motif, je me suis basé sur une image existante, représentant une étoile, que je stoque et redimensionne dans mon code de la manière suivante :

Code :
  1. $filename = './etoile.png';
  2. $h_img = 50;
  3. list($w, $h) = GetImageSize($filename);
  4. $h2 = $h_img;
  5. $w2 = $h2 * $w / $h;
  6. $w_img = $w2 * 10;
  7. // $w2 et $h2 contiennent la largeur et la hauteur d'une étoile (réduite)
  8. $im_et = ImageCreateFromPNG($filename);


Plus loin dans mon code, je colle 10 fois cette image côte à côte, de la manière suivante  

Code :
  1. for ( $i = 0; $i < 10; ++$i )
  2. {
  3. ImageCopyResized ($im, $im_et, $i * $w2, 0, 0, 0, $w2, $h2, $w, $h);
  4. }


Afin d'obtenir le résultat suivant :
http://rclsilver.free.fr/etoiles.gif
 
Et c'est là qu'arrive mon problème. J'ai essayé de plusieurs manières (je ne vais pas copier tous mes bouts de code.. car ça serait trop le "bordel" mais j'explique ce que je voudrais faire).  
 
Enfait, sur mon image avec le fond ($im, créée par ImageCreateTrueColor()), j'ai copié 10 étoiles. Et je voudrais que la partie blanche des étoiles soit transparente, afin qu'on puisse voir le fond a travers et obtenir le résultat suivant :
http://rclsilver.free.fr/etoiles_et_fond.gif  
 
Je précise que les couleurs choisies pour le moment, ne sont la rien que pour le test, et que je changerai une fois que ça fonctionnera :)
 
Merci d'avance pour votre aide, j'espère que j'ai été clair dans ma demande.
 

Reply

Marsh Posté le 15-09-2005 à 18:50:55   

Reply

Marsh Posté le 15-09-2005 à 20:13:31    

Yen a qui adorent se faire chier
 
http://gatsu.ftp.free.fr/html/TestNote/

Reply

Marsh Posté le 15-09-2005 à 20:29:04    

Je retiens ta réponse, car elle fonctionne, et c'est l'essentiel.. Mais si quelqu'un a quand meme la solution pour mon .php.. je suis preneur, au moins par curiosité.. merci d'avance, et merci gatsusat pour ta solution.

Reply

Marsh Posté le 15-09-2005 à 20:47:31    

Tiens au cas ou j'ai remis à jour, là tu peux jouer avec les px pour décaler le background de l'image, et au lieu de faire une image à 2 couleurs, j'ai simplement créé une image verte e 1px de haut et de 600 px de largeur, elle fait 1ko en jpg
et pour l'etoile, suffit juste de la répéter sur le background du div interieur.
 
ensuite tu décalle l'image en background de y px que tu as besoin
 
le mieux c'est de faire le style en inline

Code :
  1. <div style="background-position:<?=manote/parNote*largeurImg?>px"></div>


et normalement tu seras comblé :)
 
et même pas besoin de faire appel à GD

Reply

Marsh Posté le 16-09-2005 à 22:05:42    

okay merci bcp :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed