Pascal le nain | Bonjour,
Je désire générer aléatoirement des étoiles grâce à la librairie GD (lourde tâche je sais bien )
Pour l'instant j'arrive à ce résultat :
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 :
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 Pour ceux que ca intéresse et ceux qui voudraient bien passer quelques instants pour critiquer mon code :
Code :
- <?php
- function dev_graph_halo($img, $diam_out, $diam_in, $x, $y, $color_center, $color_periph)
- {
- // On dessine des cercles depuis le plus grand au plus petit cercle. 1 est le pas utilisé.
- for($i=$diam_out;$i>=$diam_in;$i=$i-1)
- {
- //$pond sert à pondérer la présence des deux couleurs en fonction du rayon
- $pond = ($i-$diam_in)/($diam_out-$diam_in);
- //Calcule les trois couleurs RVB du cercle en cours
- $red = (int)($pond*$color_periph[0]+ (1- $pond)*$color_center[0]);
- $green = (int)($pond*$color_periph[1]+ (1- $pond)*$color_center[1]);
- $blue = (int)($pond*$color_periph[2]+ (1- $pond)*$color_center[2]);
- $couleur = imagecolorallocate($img, $red, $green, $blue);
- //Calcul du diametre du cercle en cours
- $diametre = 2*(($diam_out-$diam_in)*$pond+$diam_in);
- //Dessine le cercle plein
- imagefilledellipse($img, $x, $y, $diametre, $diametre, $couleur);
- }
- }
- function dev_etoile_image_generator($id,$brillance)
- {
- global $ROOT;
- //Taille de l'image désirée
- $img_size = 200;
- //Diametre de l'étoile
- $diam = rand(120, 180);
- //Plus la brillance est élevée, plus l'étoile est jaune
- $brillance = $brillance/10;
- //Génération de la couleur de la périphérie
- $red = rand(240,255);
- $green = rand(100,230+$brillance);
- $blue = $green*0.2 + rand(0,255)*0.2;
- $color_periph = array($red,$green, $blue);
- //Génération de la couleur du centre
- $red = rand(240,255);
- $green = rand(150,230+$brillance);
- $blue = rand(0,($green*1.64-164));
- $color_center = array($red,$green, $blue);
- //Création de l'image
- $img = imagecreatetruecolor($img_size*2, $img_size*2);
- //Dessin du halo
- dev_graph_halo($img, $diam+20, $diam, imagesx($img)/2, imagesy($img)/2, $color_periph, array(0,0,0));
- //Dessin de la planete
- dev_graph_halo($img, $diam, 0, imagesx($img)/2, imagesy($img)/2, $color_center, $color_periph);
- //Création de l'image réduite
- $img_redim = imagecreatetruecolor($img_size, $img_size);
- imagecopyresampled($img_redim,$img, 0, 0, 0, 0,$img_size ,$img_size ,$img_size*2 ,$img_size*2);
- //Enregistrement
- imagepng($img_redim,$ROOT.'img/planete/'.$id.'.png');
- //Libération de la mémoire
- imagedestroy($img);
- imagedestroy($img_redim);
- }
- ?>
|
Message édité par Pascal le nain le 15-12-2009 à 21:49:37
|