PHP : Création d'étoiles réalistes avec GD

PHP : Création d'étoiles réalistes avec GD - PHP - Programmation

Marsh Posté le 15-12-2009 à 21:06:33    

Bonjour,
 
Je désire générer aléatoirement des étoiles grâce à la librairie GD (lourde tâche je sais bien  [:kikiv] )
Pour l'instant j'arrive à ce résultat :
 
http://over9000project.fr/download/soleil.png
 
Le soleil est dessiné cercle par cercle avec imagefilledellipse().
 
Le problème, c'est que les dégradé sont dégueux, surtout vers l'exérieur :
 
http://over9000project.fr/download/grad.png
 
Ma solution est de travailler l'image en 400x400 et de la resizer en 200x200. Ainsi on atténue les défauts, mais ca reste dégueu.
 
 
Existe-t-il un smooth avec GD ? l'anti-aliasing ne semble pas fonctionner...
Ya-t-il une solution plus pratique que vous avez en tête pour ce que je désire faire ?
 
Une autre question : Puis-je utiliser des filtres avec GD pour donner une texture un peu plus "éruptive" à mes étoiles ?
 
Merci d'avance  [:emanu]  
 
 
Pour ceux que ca intéresse et ceux qui voudraient bien passer quelques instants pour critiquer mon code :
 

Code :
  1. <?php
  2. function dev_graph_halo($img, $diam_out, $diam_in, $x, $y, $color_center, $color_periph)
  3. {
  4. // On dessine des cercles depuis le plus grand au plus petit cercle. 1 est le pas utilisé.
  5. for($i=$diam_out;$i>=$diam_in;$i=$i-1)
  6. {
  7.  //$pond sert à pondérer la présence des deux couleurs en fonction du rayon
  8.  $pond = ($i-$diam_in)/($diam_out-$diam_in);
  9.  //Calcule les trois couleurs RVB du cercle en cours
  10.  $red = (int)($pond*$color_periph[0]+ (1- $pond)*$color_center[0]);
  11.  $green = (int)($pond*$color_periph[1]+ (1- $pond)*$color_center[1]);
  12.  $blue = (int)($pond*$color_periph[2]+ (1- $pond)*$color_center[2]);
  13.  $couleur = imagecolorallocate($img, $red, $green, $blue);
  14.  //Calcul du diametre du cercle en cours
  15.  $diametre = 2*(($diam_out-$diam_in)*$pond+$diam_in);
  16.  //Dessine le cercle plein
  17.  imagefilledellipse($img, $x, $y, $diametre, $diametre, $couleur);
  18. }
  19. }
  20. function dev_etoile_image_generator($id,$brillance)
  21. {
  22. global $ROOT;
  23. //Taille de l'image désirée
  24. $img_size = 200;
  25. //Diametre de l'étoile
  26. $diam = rand(120, 180);
  27. //Plus la brillance est élevée, plus l'étoile est jaune
  28. $brillance = $brillance/10;
  29. //Génération de la couleur de la périphérie
  30. $red = rand(240,255);
  31. $green = rand(100,230+$brillance);
  32. $blue = $green*0.2 + rand(0,255)*0.2;
  33. $color_periph = array($red,$green, $blue);
  34. //Génération de la couleur du centre
  35. $red = rand(240,255);
  36. $green = rand(150,230+$brillance);
  37. $blue = rand(0,($green*1.64-164));
  38. $color_center = array($red,$green, $blue);
  39. //Création de l'image
  40. $img = imagecreatetruecolor($img_size*2, $img_size*2);
  41. //Dessin du halo
  42. dev_graph_halo($img, $diam+20, $diam, imagesx($img)/2, imagesy($img)/2, $color_periph, array(0,0,0));
  43. //Dessin de la planete
  44. dev_graph_halo($img, $diam, 0, imagesx($img)/2, imagesy($img)/2, $color_center, $color_periph);
  45. //Création de l'image réduite
  46. $img_redim = imagecreatetruecolor($img_size, $img_size);
  47. imagecopyresampled($img_redim,$img, 0, 0, 0, 0,$img_size  ,$img_size  ,$img_size*2  ,$img_size*2);
  48. //Enregistrement
  49. imagepng($img_redim,$ROOT.'img/planete/'.$id.'.png');
  50. //Libération de la mémoire
  51. imagedestroy($img);
  52. imagedestroy($img_redim);
  53. }
  54. ?>


Message édité par Pascal le nain le 15-12-2009 à 21:49:37
Reply

Marsh Posté le 15-12-2009 à 21:06:33   

Reply

Marsh Posté le 16-12-2009 à 18:51:45    

[:lol wut]  
Bon courage

Reply

Marsh Posté le 17-12-2009 à 00:08:08    

GD roxxxx yeaaah c'mon biatch  [:makaveli]  
 
Bouhouhou  [:nik166]  GD c'est nuuuhuuhuuul...
 
Ya pas une lib pour php un peu plus complète ?  [:robert de niro]


Message édité par Pascal le nain le 17-12-2009 à 00:08:52
Reply

Marsh Posté le 18-12-2009 à 18:58:00    

Nouvelle fournée. Je suis assez satisfait. J'ai résolu mon problème de fluidité de l'image.
Il suffit d'utiliser le filtre IMG_FILTER_GAUSSIAN_BLUR autant de fois que l'on souhaite.
 
http://www.over9000project.fr/download/etoile.png

Reply

Marsh Posté le 19-12-2009 à 17:23:46    

ça pique les yeux.[:delarue5]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 19-12-2009 à 17:47:56    

Tu as mieux à proposer ?  :whistle:  
 
Ya pas un logiciel qui permet la création d'image par un script ?
Genre une grosse macro sur photoshop...
 

Reply

Sujets relatifs:

Leave a Replay

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