[php] changer le fond d'une image distante avec GD

changer le fond d'une image distante avec GD [php] - PHP - Programmation

Marsh Posté le 10-12-2005 à 20:22:48    

bonjour,  
 
j'ai un script php qui recupere une image a distance et qui copie une zone de cette image sur une autre.
le probleme est que la zone copie qui doit etre colle possede un fond et sa fait pas tres beau j'aimerais pouvoir changer ce fond pour le rendre transparent  
 
comme c'est une zone d'une image distante je pense qu'il faudrait utiliser une fonction qui remplace une couleur par une autre  
 
voici mon code en complet :  
 

Code :
  1. <?php
  2. $username = "iowafr";
  3. $invert = "false"; //set to true to invert the text color
  4. //generate the image
  5. $im = imagecreatefrompng("base.png" );
  6. //get xfire image
  7. $xfire = imagecreatefrompng("http://fr.miniprofile.xfire.com/".$username.".png" );
  8. $transparent = imagecolorallocate ($xfire, 234, 237, 242);
  9. imagecolortransparent ($xfire,$transparent);
  10. //background and text color
  11. $background = imagecolorallocatealpha ( $im, 255, 255, 255, 127 );
  12. $ampcolor = imagecolorallocate($im, 25, 47, 127);
  13. $textcolor = imagecolorallocate($im, 0, 0, 0);
  14. //set font
  15. putenv('GDFONTPATH=' . realpath('.'));
  16. $font = "police";
  17. $fontsize = 10;
  18. //write the strings
  19. imagettftext($im, $fontsize, 0, 80, 20, $textcolor,$font, "Pseudo :" );
  20. imagettftext($im, $fontsize, 0, 86, 35, $textcolor,$font, "Statut :" );
  21. imagettftext($im, $fontsize, 0, 70, 52, $textcolor,$font, "Semaine :" );
  22. imagettftext($im, $fontsize, 0, 78, 67, $textcolor,$font, "En tout :" );
  23. //put xfire stuff down
  24. $colorindex = imagecolorat($xfire, 131, 55);
  25. $colorrgb = imagecolorsforindex($xfire,$colorindex);
  26. if ($colorrgb['red'] == 14 && $colorrgb['green'] == 38 &&
  27. $colorrgb['blue'] == 128)
  28. $statinvert = "true";
  29. imagecopymerge($im, $xfire, 126, 8, 128, 32, 260, 16, 100);
  30. // name
  31. imagecopymerge($im, $xfire, 146, 24, 147, 48, 260, 16, 100);
  32. // status text
  33. imagecopymerge($im, $xfire, 146, 38, 172, 79, 266, 31, 100);
  34. // this week all time text
  35. if ($statinvert == "true" )
  36. imagecopymerge($im, $xfire, 126, 24, 127, 48, 20, 16, 100);
  37. if ($statinvert != "true" )
  38. imagecopymerge($im, $xfire, 126, 24, 127, 48, 20, 16, 100);
  39. imagecopymerge($im, $xfire, 126, 38, 152, 78, 20, 32, 100);
  40. header("Content-type: image/png" );
  41. imagepng($im);
  42. imagedestroy($xfire);
  43. imagedestroy($im);
  44. ?>


 
comme vous pouvez le voir lors du test ( si on cree par exemple une image base.png vide ) c'est que ce qui serat colle dessus aura un background pas beau  
 
 
merci d'avance pour vos reponses

Reply

Marsh Posté le 10-12-2005 à 20:22:48   

Reply

Marsh Posté le 10-12-2005 à 20:49:18    

J'ai pas compris ce que tu voulais, tu pourrais nous montrer l'image avant, après, pendant, moche, ce que tu voudrais, etc. ?

Reply

Marsh Posté le 10-12-2005 à 20:54:58    

image externe  a partir de laquel on vas copier une zone :  
 
http://fr.miniprofile.xfire.com/iowafr.png
 
base.png : est une simple image jaune  
 
et voici le resultat du script que j'ai donné  
 
http://img14.imageshack.us/img14/8180/xfirephp6fu.png
 
vous voyez que ce que l'on a copie de l'image a un fond bleu horrible  
j'aimerais changer ce fond

Reply

Marsh Posté le 10-12-2005 à 21:13:04    

Le fond bleu derrière thomas (iowafr), c'est une multitude de bleus différents. Donc même si tu essayes de rendre une couleur transparente, ça va t'obliger à t'occuper d'une tripoté de couleur.
Ce que tu peux faire, c'est passer l'image en GIF 3 couleurs, sans tramage, la réduction des couleurs a de fortes chances de te remplacer tous les tons bleus par un seul bleu
http://www.nexen.net/docs/php/anno [...] alette.php
 
Ensuite tu lui donnes la couleur transparente et tu recopies sur un nouveau fond.  
 
A tester.
 
Par contre, il va falloir bidouiller pour trouver les bons index de couleur et y aller à taton.
 
Bon courage, mais c'est faisable.

Reply

Marsh Posté le 10-12-2005 à 21:46:59    

j'ai transforme l'image  
 
mais comment je fais pour changer le fond ?

Reply

Marsh Posté le 10-12-2005 à 22:10:27    

Tu la repasse en TrueColor et tu définies la couleur transparente.
http://www.nexen.net/docs/php/anno [...] parent.php
 
ça parait laborieux, mais je ne vois que ça, peut-être quelqu'un pourra-t-il te souffler une meilleur astuce...

Reply

Marsh Posté le 11-12-2005 à 13:36:02    

merci de ton aide sa me fait grandement avancé  
j'ai tiré le code minim du script que j'ai donné en haut  
voici le code minum :  

Code :
  1. <?php
  2. $username = "iowafr";
  3. $im = imagecreatefrompng("base.png" );
  4. $xfire = imagecreatefrompng("http://fr.miniprofile.xfire.com/".$username.".png" );
  5. imagetruecolortopalette($xfire,FALSE,3);
  6. imagecopymerge($im, $xfire, 146, 24, 147, 48, 260, 16, 100);
  7. $color = imagecolorallocate($im, 208, 215, 223);
  8. imagecolortransparent($im,$color);
  9. header("Content-type: image/png" );
  10. imagepng($im);
  11. imagedestroy($xfire);
  12. imagedestroy($im);
  13. ?>


 
apres execution de ce code voici l'image que j'en tire :  
http://img217.imageshack.us/img217/9521/xfire2php7oo.png
 
le pas beau bleu a disparu pour laisse place a un blanc ( c'est deja mieux )  
mais comment faire pour remplacer le blanc par du transparent ?  
 
merci encore
 
edit : mince j'avais oublié IE ne gere pas la transparence des png  
je sais qu'il existe des hack je me renseigne


Message édité par iowafr le 11-12-2005 à 13:37:27
Reply

Sujets relatifs:

Leave a Replay

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