PHP/GD composition d'images png

PHP/GD composition d'images png - PHP - Programmation

Marsh Posté le 27-12-2005 à 12:29:13    

Salut tt le monde  :hello:  
 
J'ai déjà posté mon message partout sur le net sans succès, je pence qu'ici il y aura plus de réponses! :bounce:  
 
Alors voila mon problème: je cherche à créer une image png à partir d'autres images png 24 bits (avec un canal alpha)
 
- Donc je commence par créer mon image principale avec imagecreatetruecolor()...
- Puis je charge mes images avec imagecreatefrompng(..)
- Je mixe mes images avec des imagecopymerge(...)
- Enfin, je rend le tout imagepng()
 
Jusque la ça va, le problème, c'est cette p... de transparence!!  :fou:  
Apparement le canal alpha n'est pas pris en compte, du coup, ce qui devait etre transparent est remplacé par du blanc bref, tout est opaque  :pt1cable:  
 
J'ai cherché et j'ai essayé d'ajouter des imagesavealpha() et des imagealphablending un peu de partout mais c toujours pareil. A pas de transparence, ça marche que lorsque de je rend 1 seule image :p
 
Donc est-ce que cette chose est possible à faire? est-ce que j'utilise les bonnes fonctions? est-ce qu'il fo faire le traitement pixel par pixel pour chaque image pour gerer le canal alpha?  :sweat:  
 
 
Merchi !


---------------
La paresse, c'est se lever très tot le matin pour avoir plus de temps à ne rien faire...
Reply

Marsh Posté le 27-12-2005 à 12:29:13   

Reply

Marsh Posté le 30-12-2005 à 02:45:24    

Vous battez pas, j'ai trouvé!  :D  
 
Pour les curieux, voici un petit code rapide pour fusionner des images PNG encodées en 24bits, (donc avec un canal alpha):
 

Code :
  1. <?php
  2.   // On va renvoyer une image PNG
  3.   header('Content-Type: image/png');
  4.   // Création de l'image (vierge)
  5.   $rendu = imagecreatetruecolor($largeur, $hauteur);
  6.   // Par défaut le fond de l'image est noir, on va la remplir d'une couleur
  7.   // Ici du bleu clair
  8.   $fond = imagecolorallocatealpha($rendu,  0, 128, 255, 0);
  9.   imagefill($rendu, 0, 0, $fond);
  10.   // On active l'alphablending
  11.   imagealphablending($rendu, true);
  12.   // On charge le ou les image(s) png
  13.   $image1 = imagecreatefrompng("nom de l'image" );
  14.   $image2 = ...
  15.   // Fusion des images sur l'image finale
  16.   imagecopy($rendu, $image1, positionX, positionY, largeur_image, hauteur_image);
  17.   imagecopy(......);
  18.   // On déactive l'alphablending
  19.   imagealphablending($rendu, false);
  20.   // Sauvegarde des données alpha
  21.   imagesavealpha($rendu, true);
  22.   // Enfin, on rend l'image
  23.   imagepng($rendu);
  24. ?>


 
Vala, maintenant on peut faire des beaux dessins en PHP avec de l'antialiasing  ^^
 
A+

Reply

Marsh Posté le 03-07-2009 à 00:20:23    

Bonjour.
 
J'ai le meme genre de probleme et je ne comprends pas ce que tu as fait.
 
j'ai des images hexagonales avec lesquelle je voudrais dessiner un plateau de jeu.
 
voici mon code :
 

Code :
  1. <?php
  2. header('Content-type: image/png');
  3. $rayon = $_GET['r'];
  4. $diam = $rayon * 2 + 1;
  5. $hexH = 33;
  6. $hexW = 67;
  7. $hexHR = 7;
  8. $hexWR = 10;
  9. $margeSup = 20;
  10. $marges = 5;
  11. $height = $diam * $hexH + $hexHR;
  12. $heightR = $height + $margeSup + $marges;
  13. $width = $diam * $hexW + $hexWR;
  14. $widthR = $width + $marges + $marges;
  15. $im = imagecreatetruecolor($widthR, $heightR);
  16. $noir = imagecolorallocate($im, 0, 0, 0);
  17. imagefill( $im, 0, 0, $noir);
  18. imagecolortransparent($im, $noir);
  19. imagealphablending($im, true);
  20. $hexa = imagecreatefrompng("montagne.png" );
  21. $noir = imagecolorallocate($hexa, 0, 0, 0);
  22. imagecolortransparent($hexa, $noir);
  23. //imagealphablending($hexa, true);
  24. $x0 = $rayon * $hexH;
  25. $y0 = $rayon * $hexW;
  26. $yi = $rayon;
  27. while ($yi >= -$rayon)
  28.     {
  29.     $xi = -$rayon;
  30.     while ($xi <= $rayon)
  31.         {
  32.         if(($xi<=0 and $yi<=0) or ($xi>=0 and $yi>=0) or ($rayon >= abs($yi)+abs($xi)))
  33.             {
  34.             $im = drawHex($xi, $yi, $im, $hexa, $x0, $y0);
  35.             }
  36.         $xi = $xi + 1;
  37.         }
  38.     $yi = $yi - 1;
  39.     }
  40. imagedestroy($hexa);
  41. imagepng($im);
  42. imagedestroy($im);
  43. function drawHex($x ,$y , $img, $hex, $x0, $y0)
  44.     {
  45.    
  46.     $x0 = $x0 + $x * 9;
  47.     $y0 = $y0 + $x * 67;
  48.     $x0 = $x0 - $y * 33;
  49.     $y0 = $y0 - $y * 18;
  50.     imagecopymerge($img, $hex, 0, 0, -$y0, -$x0, 700, 500, 100);
  51.     return $img;
  52.     }
  53. ?>


 
ca me donne ca : http://www.fallenheaven.org/carte/imageAlpha.php?r=4
Evidamment, ca n'est pas le but recherche... les rectangles blancs qui entourent les hexagones devraient etre invisibles.
 
voici l'image de montagne de laquelle je pars : http://www.fallenheaven.org/carte/montagne.png
 
Un petit coup de main serait le bienvenu.

Reply

Marsh Posté le 17-08-2009 à 11:04:11    

Bonjour amis développeur je recherche une solution php pour créé une composition en GD mon but étant de pouvoir créé ce genre de composition : http://kdesroches.fr/capture.jpg.
 
J'avais commencer un code, mais rien de bien génial . Avez vous un code qui pourrai éventuellement me servir de base ? En remerciant par avance . Kilian

Reply

Sujets relatifs:

Leave a Replay

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