Superposition de deux images

Superposition de deux images - PHP - Programmation

Marsh Posté le 06-11-2002 à 23:24:43    

Salut,
 
J'ai vu dans un recent tuto de phpdebutant.com qu'il etait possible de faire pas mal de manipulations sur une image: http://www.phpdebutant.org/article111.php
 
J'aurais voulu savoir si il etait possible grace a une fonction de ce genre de fusionner 2 images pour en obtenir une seule ?
 
Par exemple un calque transparent avec le logo de mon site, qui viendrait se superposer à toute les images mise sur le site. Tout ceci automatiquement grace a une fonction.
 
Merci d'avance.


Message édité par Vadrigar le 06-11-2002 à 23:26:46
Reply

Marsh Posté le 06-11-2002 à 23:24:43   

Reply

Marsh Posté le 07-11-2002 à 10:25:49    

il me semble que j'avais vu un tuto pour rendre une image semi transparente... si je retrouve l'adresse, je la mettrais ici :)


---------------
Parce que vous aussi vous le valez bien :)
Reply

Marsh Posté le 07-11-2002 à 13:20:08    

Ok merci

Reply

Marsh Posté le 07-11-2002 à 14:24:25    

ImageCopyMerge
(PHP 4 >= 4.0.1)
 
ImageCopyMerge --  Copie et fusionne une partie d'une image  
Description
int imagecopymerge ( resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)
 
 
imagecopymerge() copie une partie de l'image src_im dans l'image de destination dst_im en commençant aux coordonnées (src_x, src_y), avec la largeur src_w et la hauteur src_h. La zone de l'image ainsi définie sera copiée aux coordonnées (dst_x, dst_y), dans l'image de destination. Les deux images seront fusionnées suivant le paramètre pct, qui peut valoir de 0 à 100. Si pct = 0, aucune action n'est faite, alors que si pct = 100, imagecopymerge() se comporte exactement comme imagecopy().  
 
Note : imagecopymerge() a été ajoutée en PHP 4.0.6.  

Reply

Marsh Posté le 07-11-2002 à 14:34:50    

Salut,
 
J'ai quelque part dans mes cartons un projet de site de jeu de plateau online. Je voulais donc que superposer l'image du pion a celle de la case.
 
De mémoire imagecopymerge() ne donnais pas le résultat cherché car elle mélange les couleurs de chaque image et ne le superpose pas.
Je faisait donc une méthode un peu bourrin: pour chacun des pixels de images1 ( au dessus ) je comparais avec la valeur de la couleur transparente. En cas de test positif le pixel de l'image final prenait la couleur du pixel de l'image1 sinon de images2.
 
Je n'est pas le code avec moi, je le poste aussi demain.
 
Mirgolth

Reply

Marsh Posté le 07-11-2002 à 15:10:05    

Heu, tu n'as pas du utiliser la commande décrite ci-dessus correctement, car moi je n'ai aucun problème avec...  :heink:

Reply

Marsh Posté le 07-11-2002 à 15:16:14    

Hermes le Messager a écrit a écrit :

Heu, tu n'as pas du utiliser la commande décrite ci-dessus correctement, car moi je n'ai aucun problème avec...  :heink:  



Ce qu'il veut dire c'est qu'il a été géné par l'abscence de couleur transparente dans les images des pièces ou que la couleur transparente n'est pas géré par imagecopymerge().
Du coup, soit il affichait pas sa pièce, soit une pièce sur une case blanche n'avait pas la même couleur que la même pièce sur une case noire. ;)

Reply

Marsh Posté le 07-11-2002 à 15:28:22    

C'est ça Omega2 !
 
si tu as un carré rouge et un bleu imagecopymerge () va te sortir un carré violet, plus ou moins selon la valeur de pct.
 
Mirgolth


---------------
Livres dont vous êtes le héros
Reply

Marsh Posté le 07-11-2002 à 15:30:34    

Oki !  
 
Mais ce problème n'est-il pas résolu avec des images en png ?  :??:

Reply

Marsh Posté le 07-11-2002 à 15:39:59    

Hermes le Messager a écrit a écrit :

Oki !  
 
Mais ce problème n'est-il pas résolu avec des images en png ?  :??:  




Je bossais sur des png.
Mais ce n'est pas un problème, c'est une fonctionalité  :)  
C'est le but de cette fonction: mélanger/fusionner 2 images mais je suis sur qu'il existe mieux que ma technique porcine.
 
Mirgolth


---------------
Livres dont vous êtes le héros
Reply

Marsh Posté le 07-11-2002 à 15:39:59   

Reply

Marsh Posté le 08-11-2002 à 11:23:21    

mirgolth a écrit a écrit :

Je n'est pas le code avec moi, je le poste aussi demain.



J'ai un peu la tête creuse et j'ai oublié  :(  
Mais je trouverais bien le temps pendant ce long WE...
 
Mirgolth


---------------
Livres dont vous êtes le héros
Reply

Marsh Posté le 08-11-2002 à 12:32:45    

Ok bah merci en tout cas  :jap:

Reply

Marsh Posté le 12-11-2002 à 09:52:41    

Voilà le code que j'avais fais.
C'est lent, très lent !
 
Si quelqu'un à déjà utilisé imagecolortransparent () correctement pouvais me renseigner d'ailleurs...
 

Code :
  1. <?php
  2. $image1 = "jaune.png"; // dessous
  3. $image2 = "rouge2.png"; // dessus
  4. $im1 = imagecreatefrompng ($image1);
  5. $im2 = imagecreatefrompng ($image2);
  6. $size = getimagesize ($image1);
  7. $im = @imagecreate ($size[0], $size[1]);
  8. /**
  9. Méthode qui ne marche pas !
  10. Je recupère la couleur transparente de $im2
  11. $trou = imagecolortransparent ($im2);
  12. $index = imagecolorsforindex ($im2, $trou );
  13. $transp = imagecolortransparent ( $im, imagecolorallocate ( $im, $index['red'], $index['green'], $index['blue'] ));
  14. */
  15. // Comme l'autre méthode ne fonctionne pas je met la couleur transparente à blanc...
  16. $transp = imagecolortransparent ( $im, imagecolorallocate ( $im, 255, 255, 255 ));;
  17. for ($y = 0; $y < 20; $y++) {
  18. for ($x = 0; $x < 20; $x++) {
  19.  $color = imagecolorat ($im2,$x,$y);
  20.  $index = imagecolorsforindex ($im2, $color );
  21.  $new_index = imagecolorexact ( $im, $index['red'], $index['green'], $index['blue'] );
  22.  if ( $new_index < 0 ) {
  23.   $new_index = imagecolorallocate ( $im, $index['red'], $index['green'], $index['blue'] );
  24.  }
  25.  if ($new_index == $transp) {
  26.   // Transparent : on recupère la couleur de fond
  27.   $index = imagecolorsforindex ($im1, imagecolorat ($im1,$x,$y) );
  28.   $final = imagecolorexact ( $im, $index['red'], $index['green'], $index['blue'] );
  29.   if ( $final < 0 ) {
  30.    $final = imagecolorallocate ( $im, $index['red'], $index['green'], $index['blue'] );
  31.   }
  32.   imagesetpixel($im, $x, $y, $final);
  33.  } else {
  34.   // Pas transparent
  35.   imagesetpixel($im, $x, $y, $new_index);
  36.  }
  37. }
  38. }
  39. header ("Content-type: image/png" );
  40. imagepng ($im);
  41. ?>


---------------
Livres dont vous êtes le héros
Reply

Sujets relatifs:

Leave a Replay

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