images en boucle

images en boucle - PHP - Programmation

Marsh Posté le 14-05-2008 à 13:54:12    

Bonjour :),
 
Je souhaite réaliser une palette de 256 couleur.A partir d'un nombre compris entre 0 et 1 je détermine les 3 composante RVB (on par du bleu pour 0 à rouge pour 1).
J'ai à ma disposition un tableau de 100 valeurs comprises entre 0 et 1. J'ai la fonction qui retourne les composante RVB.
 
Ce que je souhaite maintenant c'est afficher ma norme (comprise entre 0 et 1) et visualiser la couleur résultante dans un petit carré juste à coté, et ce pour mes 100 valeurs.
Ce qu'il y a c'est que ca ne marche que pour la première valeur : sa affiche un rectangle rouge mais pour la suite... je ne comprend pas...
 
Voivi le code :
 
<?php
header("Content-type: image/png" );
for($i = 0;$i<99;$i++){
 $norme_param = $tab_normes[$i];
 
 // Définition de la couleur (du bleu au rouge de 0 à 1) -----------------------------------------------------
  if ($norme_param < 1/3 and $norme_param >= 0){
   $r = 0;
   $v = $norme_param * 255;
   $b = 255;
  }
  elseif($norme_param >= 1/3 and $norme_param <= 2/3){
   $r = $norme_param * 255;
   $v = 1;
   $b = (1 - $norme_param) * 255;
  }
  elseif($norme_param > 2/3 and $norme_param <= 1){
   $r = 255;
   $v = (1 - $norme_param) * 255;
   $b = 0;
  }
  else{ //Erreur  -->  noir
   $r = 0;
   $v = 0;
   $b = 0;
  }
// ----------------------------------------------------------------------------------------------------------------------
 
 
// Créatiojn d'image pour test la palette de couleurs
//echo 'norme '.$i.' = '.$norme_param.'';
$im = @imagecreate(110, 20) or die("Impossible d'initialiser la bibl GD" );
$background_color = imagecolorallocate($im, $r, $v, $b);
imagepng($im);
imagedestroy($im);
echo'</br>';
}
 
?>
 
 
De plus si je décommente la ligne "//echo 'norme '.$i.' = '.$norme_param.'" sa fait l'erreur :
"L'image “http://localhost/Guillaume/imgs.php” ne peut être affichée car elle contient des erreurs".
 
Comment pourrais-je remédier à tout cela?
Any idea?  
a plouch !!
 
2dt3nS

Reply

Marsh Posté le 14-05-2008 à 13:54:12   

Reply

Marsh Posté le 14-05-2008 à 16:29:19    

Evite de mettre des "echo" dans un script qui affiche une image ;)
Pour le reste, c'est un problème de conception dans ton code.
J'ai pas vraiment compris ce que tu voulais faire, mais a priori, tu boucle sur un tableau et a chaque itération tu set tes variables $r, $v$ et $b.
A la sortie de ta boucle tu crée ton image et tu lui donne la couleur de la dernière itération de ta boucle.

Reply

Marsh Posté le 15-05-2008 à 15:31:52    

Merci pour ta réponse mais au final j'ai trouvé la solution.
 
Le problème était que je voulais créer puis afficher une image différente pour chaque couleurs alors qu'en fait il est plus judicieux de créer une seule image avec plusieurs formes...
 
le code parlera peut etre mieu...
demo_palette.php
<?php
header("Content-type: image/png" );
$im = @imagecreate(110, 500) or die("Impossible d'initialiser la bibl GD" );
 
// 100 valeurs entre 0 et 1 -----------------------------
$tab_normes = array();
$val = 0;
for ($j=0;$j<100; $j++){
 $tab_normes[$j] = $val;
 $val = $val + 0.01;
}
// ------------------------------------------------------------
 
// Créationn et affichage de la palette ------------------------------------------------------------------------------
for($i = 0;$i<100;$i++){
 $norme_param = $tab_normes[$i];
 
 // Définition de la couleur (du bleu au rouge de 0 à 1) --------------------------------------------
  if ($norme_param < 1/3 and $norme_param >= 0){
   $r = 0;
   $v = ($norme_param*3) * 255;
   $b = 255;
   ;
  }
  elseif($norme_param >= 1/3 and $norme_param <= 2/3){
   $r = ($norme_param - (1/3))*3 * 255;  
   $v = 255;
   $b = 255 - $r;
  }
  elseif($norme_param > 2/3 and $norme_param <= 1){
   $r = 255;
   $v = ((1 - $norme_param) *3) * 255;
   $b = 0;
  }
  else{ //Erreur  -->  noir
   $r = 0;
   $v = 0;
   $b = 0;
  }
 // -------------------------------------------------------------------------------------------------------------
 
 $color = imagecolorallocate($im, $r, $v, $b);    // Création de la couleur
 ImageFilledRectangle ($im, 0, $i*5, 110, ($i+1)*5, $color); // dessiner
}
// -------------------------------------------------------------------------------------------------------------------------------
imagepng($im); // Afficher l'image ainsi dessinée
//imagepng($im,'img.png'); // Créer image physiquement
imagedestroy($im);  
 
?>
 

Reply

Marsh Posté le 15-05-2008 à 15:51:00    

Ok, là c'est mieux (mais pense à utiliser la balise [ code ] [/ code ] la prochaine fois).

Reply

Sujets relatifs:

Leave a Replay

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