php-GD iprob saturation de palette imagecoloralocate ??

php-GD iprob saturation de palette imagecoloralocate ?? - PHP - Programmation

Marsh Posté le 03-06-2005 à 18:57:16    

Bonjour,
 
je vais pas copier coller mon code je vais juste expliquer mon problème.
 
Je crée une image jpeg, et j'ecris un simple texte. Bleu sur orange.
Lorsque j'affiche l'image elle sort niquel. Ok. Pas de prob.
 
Maintenant je veux faire un effet sur les pixels cad je veux faire une espece de neige la dessus. Pas de prob je sais comment faire au point de vue de l'algo. MAIS, ce qu'il se produit c'est lorsque je recupere la couleur du pixel, et que je reecris meme cette meme valeur. Il prend le fond, mais pas le texte qui a ete ecris dedans!?
 
Alors ma question est, est-ce que php considere que le texte ajouté dans l'image comme du texte?!?! (incohérent selon moi) et donc il ne prend en compte que le background ?  
 
J'pige pas :'(
 
Moi je veux juste lire un pixel et le transformer suivant sa couleur, c tout. Me dite pas qu'y'a pas moyen!
 
J'utilise les fonctions : imagecolorsforindex() et imagecolorat() pour recup la couleur et la rendre humainement lisible.
 
Ensuite pour changer le pixel j'utilise imagesetpixel()
 
Voila.
 
Merci d'avance


Message édité par Gat$ le 03-06-2005 à 19:46:09
Reply

Marsh Posté le 03-06-2005 à 18:57:16   

Reply

Marsh Posté le 03-06-2005 à 19:00:00    

Bon je vais quand meme copier coller mon code au cas ou car, le truc encore plus fou c'est que si j'affiche la valeur (la couleur) du pixel lu, la couleur change!!!!!!!!!!!!! Donc je recup bien la bonne couleur des != pixels?!  
 
M'enfin je deviens fou ou quoi  :lol:  
 
Lisez le code a partir de la ligne 28, ce qu'il ya au dessus fonctionne tres bien.
 
 

Code :
  1. <?
  2. // Config
  3. $nbchar=6;
  4. $allowed_chars='ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  5. // Header
  6. header ("Content-type: image/jpeg" );
  7. // Creation de l'image et config
  8. $im = ImageCreate (92,30);
  9. $im2 = ImageCreate (92,30);
  10. $background_color = ImageColorAllocate ($im, 255, 222, 144) ;
  11. $ecriture_color[0] = ImageColorAllocate ($im, 220, 190, 95) ;
  12. $ecriture_color[1] = ImageColorAllocate ($im, 22, 99, 255) ;
  13. // Génération du code aleatoire
  14. srand( ((int)((double)microtime()*1000003)) );
  15. for($i=1; $i<=$nbchar; $i++) {
  16.  $rnd = rand(0, strlen($allowed_chars)-1).'-'; //
  17.  $char = substr($allowed_chars, $rnd,1);
  18.  for($j=0; $j<2; $j++) {
  19.   imagestring ($im, 5, ($i*12)+$j, (7+rand(-3, 3)+$j), $char, $ecriture_color[$j]);
  20.  }
  21. }
  22. // Ajout de neige
  23. for($x=0; $x<92; $x++) {
  24.  for($y=0; $y<30; $y++) {
  25.   $rgb = imagecolorsforindex($im, imagecolorat($im, $x, $y));
  26.   $r=$rgb['red']; // +rand(-4, +4);
  27.   $g=$rgb['green']; // +rand(-4, +4);
  28.   $b=$rgb['blue']; // +rand(-4, +4);
  29.   $color_neige = imagecolorallocate ($im2, $r, $g, $b) ;
  30.   imagesetpixel($im2, $x, $y, $color_neige);
  31.   unset($color_neige);
  32.   //echo "$r, $g, $b<br>";
  33.  }
  34. }
  35. imagejpeg ($im2);
  36. ?>


 
 
edit: le $im2 c'etait pour tester, mais je pense pa que ca soit utile ;) car ca change rien tfacon
 
 
 
edit 2 :  
 
Voila une partie de resultats quand j'affiche les 3 couleur r v b !


255, 222, 144
255, 222, 144
255, 222, 144
22, 99, 255
255, 222, 144
255, 222, 144
255, 222, 144
255, 222, 144
255, 222, 144
255, 222, 144
255, 222, 144
255, 222, 144
22, 99, 255
255, 222, 144
255, 222, 144


 
On constate qu'il ya de grosse variance de couleur et donc je ne devrais pas avoir un bete carré orange !!!! HELP je vais peter un cable  [:mlc]  :pt1cable:


Message édité par Gat$ le 03-06-2005 à 19:16:17
Reply

Marsh Posté le 03-06-2005 à 19:30:37    

Bon voici ce que ca donne quand je colle le texte a gauche
 
http://www.lacitrouille.com/code.php
 
il fait ne fait une partie de l'image mais pas le reste alros que ma double boucle X et Y balaie bien toute l'image, dite moi si je me trompe..??????????
 
:(

Reply

Marsh Posté le 03-06-2005 à 19:35:51    

En fait j'ai l'impression que je sature la palette de couleur mais que faire d'autre a part imagecolorallocate () ?????
 
c fou ce truc :( HELPPPPPPPPPPPPPPPP :'( :'(

Reply

Marsh Posté le 03-06-2005 à 19:43:34    

Bon j'arrive +- a contourner le probleme en faisant :  
 

Code :
  1. // Ajout de neige
  2. for($x=0; $x<92; $x++) {
  3.  for($y=0; $y<30; $y++) {
  4.   $rgb = imagecolorsforindex($im, imagecolorat($im, $x, $y));
  5.   $r=$rgb['red']; // +rand(-4, +4);
  6.   $g=$rgb['green']; // +rand(-4, +4);
  7.   $b=$rgb['blue']; // +rand(-4, +4);
  8.   if($r!=$s_r || $g!=$s_g || $b!=$s_b)
  9.    $color_neige = imagecolorallocate ($im, $r, $g, $b);
  10.   imagesetpixel($im, $x, $y, $color_neige);
  11.   //echo "$r, $g, $b<br>";
  12.   $s_r=$r;
  13.   $s_g=$g;
  14.   $s_b=$b;
  15.  }
  16. }


 
Mais il arrive une ofis sur 6 que la palette soit de nouveau saturée !
et alros l'image s'affiche pas en entier, comment contourner ce probleme?
 
C'est quand meme pas normal, si maintenant je veux faire des effet sur une image 1024*768 ? et changer la couelur de chaque pixel ?  
 
Comment faire pour que je sature pas le truc (parce que je c pas vraiment ce que je sature) ?
 
HELP !!!!!!!!!! :(

Reply

Marsh Posté le 03-06-2005 à 19:53:16    

Bon en imagecreatetruecolor ca passe :D :D :D
 
C'etait encore un épisode de Gat$ qui pete un cable et resoud le pb tt seul lol
 
A+

Reply

Marsh Posté le 03-06-2005 à 23:02:06    

Bon bah c'était sympa de t'aider, j'allais te proposer imagecreatetruecolor justement :lol:.

Reply

Sujets relatifs:

Leave a Replay

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