[PHP/GD] Superposition de plusieurs images avec tranparence...

Superposition de plusieurs images avec tranparence... [PHP/GD] - PHP - Programmation

Marsh Posté le 12-09-2006 à 17:58:31    

Bonjour :)
 
 
Je suis en train de bosser sur un projet dans lequel je dois superposer 3 "plans" qui sont en fait des 3 niveaux différents. Chaque plan comprend des carrés disposés partout sur l'image, et donc chaque plan possède une taille de carré différente.
 
En bricolant un peu de PHP j'ai réussi à créer 1 image pour chaque plan avec de la transparente sur les zones "vide". (ImageAlphaBlending)
Ensuite dans un autre script, j'utilise 2 fois "imagecopymerge" pour superposer les images. Malheureusement ca ne gère plus la transparence...
 
Donc j'ai 2 petites questions,  
 
- Comment réaliser une superposition de 3 images (ou plus..) mais en gérant aussi la transparence (à savoir 50% pour chaque "calque" ) ?
- Est-il possible de créer en PHP un rectangle comme avec "imagefilledrectangle", mais afin que ce rectangle ai un niveau de tranparence dans l'image ...?  
 
 
 
 
 
 
 
Voici le code avec lequel je superpose les 3 images... :
 
 

Code :
  1. $source = imagecreatefrompng("img_niveau_2.png" );
  2. $destination = imagecreatefrompng("img_niveau_1.png" );
  3. $largeur_source = imagesx($source);
  4. $hauteur_source = imagesy($source);
  5. $largeur_destination = imagesx($destination);
  6. $hauteur_destination = imagesy($destination);
  7. $destination_x = $largeur_destination - $largeur_source;
  8. $destination_y =  $hauteur_destination - $hauteur_source;
  9. imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 50);
  10. imagepng($destination,"temp.png" );
  11. // ----------------------------------------------------------------------------------------------------------------
  12. header ("Content-type: image/png" );
  13. $source = imagecreatefrompng("temp.png" );
  14. $destination = imagecreatefrompng("img_niveau_3.png" );
  15. $largeur_source = imagesx($source);
  16. $hauteur_source = imagesy($source);
  17. $largeur_destination = imagesx($destination);
  18. $hauteur_destination = imagesy($destination);
  19. $destination_x = $largeur_destination - $largeur_source;
  20. $destination_y =  $hauteur_destination - $hauteur_source;
  21. imagecopymerge($destination, $source, $destination_x, $destination_y, 0, 0, $largeur_source, $hauteur_source, 50);
  22. imagepng($destination);
  23. // ----------------------------------------------------------------------------------------------------------------
  24. unlink("temp.png" );


 
 
Merci :)


Message édité par ptibat le 13-09-2006 à 09:40:13

---------------
flick r
Reply

Marsh Posté le 12-09-2006 à 17:58:31   

Reply

Marsh Posté le 13-09-2006 à 11:39:43    


Personne ?  :sweat:  


---------------
flick r
Reply

Marsh Posté le 13-09-2006 à 12:47:23    

ce que tu peux essayer c'est d'ajouter tes calques dans l'ordre inverse pour qu'au final le dernier calque soit fusionné avec le fond (je sais pas si c'est clair en fait :D)
 
si tu as disons 5 calques de 5 à 1 (avec 1 étant l'image du fond) il faut fusionner 5 et 4, puis 54 et 3 puis 543 et 2 etc (à voir..)
 
et pour le rectangle, tu peux lui assigner couleur et canal alpha, donc ça doit pas poser de problème


Message édité par Sh@rdar le 13-09-2006 à 12:48:26

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 14-09-2006 à 11:06:58    


Ca y est j'ai réussi les 2 méthodes :)
 
J'avais pas fait gaffe qu'il y avait une fonction "imagecolorallocatealpha" pour la transparence. :)
 
 
Merci :jap:


---------------
flick r
Reply

Sujets relatifs:

Leave a Replay

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