Petit problème de fonction. [Résolu]

Signaler
Messages postés
115
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
7 mars 2008
-
Messages postés
115
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
7 mars 2008
-
Bonjour :)
Je n'arrive à rien dans mon code, est-ce normal car c'est impossible ou est-ce que je déconne?
Je cherche en fait à dessiner un carré dans un png avec a chaques affichages différents, une couleur aléatoire.
J'ai tout simplifier afin de vous exposer clairement mon problème.
<?php
$noir = imagecolorallocate($image,0,0,0);

 function random_couleur()
{
return $noir;
}
$random_couleur = random_couleur();

 imagefilledrectangle ($image,60,45,128,98,$random_couleur);
?>

Sans passer par la fonction ça tourne nickel mais on m'impose un code archi-clean.
Si vous pensez également à une autre méthode, faite moi signe

6 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Une fonction est limitée à sa propre portée. Elle ne voit pas les variables définies en dehors d'elle, globales mises à part. De même, une variable définie DANS une fonction est limitée à sa portée.
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
re,,
<?php
function random_couleur {
    $aColors = array(50,100,150,200);
    return array ('R' > array_rand($aColors), 'G' > array_rand($aColors), 'B' > array_rand($aColors));
}

$aRandColors = random_couleur();
$couleur_fond = imagecolorallocate ($image, 255, 230, 241);
$random_couleur = imagecolorallocate($image, $aRandColors['R'], $aRandColors['G'],  $aRandColors['B'];
$random_couleur =
imagefilledrectangle ($image,60,45,128,98,$random_couleur);

header ("content-type: image/png");
imagepng($image);
imagedestroy($image);
?>
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

heu...pardonne-moi, mais il ne veut rien dire ton code ?
Tu définis une variable $noir qui est une ressource de couleur...noire...à partir d'une variable $image non définie.
Puis tu définis une fonction qui ne fait que renvoyer $noir...$noir qui n'est pas connue de ta fonction puisque cette variable a été déclarée à l'extérieur.
Tu affectes ensuite à une autre variable, $random_couleur, le résultat de ta fonction. Fonction qui renvoie forcément 0 vu que visiblement, tu es dans une configuration de php très laxiste.
Et enfin, tu crées un rectangle dont les traits ont la couleur $random_couleur. Qui vaut 0.

Où vois-tu que tu génères une couleur aléatoire, là? Même sans fonction, je vois mal comment ça peut marcher ? Bon, je suppose que c'est juste une portin de ton code et que ta variable $image a été définie avant...j'espère ;-) Mais ça ne chang rien au fait que ta fonction ne fait rien, et qu'il n'y a aucune notion de génération aléatoire d'une couleur, là.
Messages postés
115
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
7 mars 2008

Merci beaucoup de ton aide, je ne savais pas que dans une fonction, on ne pouvait pas utiliser une variable prédéfinie ailleurs.
Sinon, c'est vrai que ma config de php est très laxiste, et l'ironie du sort c'est qu'en plus j'ai même pas accès aux log.

Je vais don éclaircir tout ça et reporter mon code.
Messages postés
115
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
7 mars 2008

Ca y est! J'ai enfin ce que je souhaitais.

Je sais qu'il y a Beaucoup  plus simple mais je fais a mon niveau. Puis de temps en temps j'apprends et je fais mieux par la suite.

<?php
$largeur = 400;
$hauteur = 260;
 
$image = imagecreate($largeur,$hauteur);

function random_couleur_r() {
 $r = mt_rand(1, 255);    if ($r <'50') {$r '1' ; }elseif ($r <'100') {$r '50' ; }  elseif ($r <'150') {$r '100' ; }  elseif ($r <'200') {$r '150' ; }  elseif ($r <'230') {$r '250' ; }   
      return $r;}
   
    function random_couleur_v() {
 $v = mt_rand(1, 255);    if ($v <'50') {$v '1' ; }elseif ($v <'100') {$v '50' ; }  elseif ($v <'150') {$v '100' ; }  elseif ($v <'200') {$v '150' ; }  elseif ($v <'230') {$v '250' ; }   
      return $v;}
     
     
      function random_couleur_b() {
 $b = mt_rand(1, 255);    if ($b <'50') {$b '1' ; }elseif ($b <'100') {$b '50' ; }  elseif ($b <'150') {$b '100' ; }  elseif ($b <'200') {$b '150' ; }  elseif ($b <'230') {$b '250' ; }   
      return $b;}

$couleur_fond = imagecolorallocate ($image, 255, 230, 241);
$random_couleur = imagecolorallocate($image, random_couleur_r(), random_couleur_v(), random_couleur_b());
$random_couleur =
imagefilledrectangle ($image,60,45,128,98,$random_couleur);

header ("content-type: image/png");
imagepng($image);
imagedestroy($image);
 ?>J'ai rajouté des ( if ($v <'50') {$v '1' ; }) pour d'une afficher des couleurs distinctes et en plus, je trouve qu'avec cette méthode, les couleurs sont plus jolies.
Merci encore Malalam ;)
Messages postés
115
Date d'inscription
mercredi 27 août 2003
Statut
Membre
Dernière intervention
7 mars 2008

J'avais vu sur la doc php que l'on pouvait retourner plusieurs variables d'une fonction avec un array mais je ne tâte pas trop les tableaux.
C'est sur que négliger les array à mon stade est vraiment absurde, je vais donc m'y pencher avant de m'attaquer à ton tutorial sur la méthode objet que je guette depuis quelques temps déjà.

Entre autres j'ai déjà implémenté ton code à la place du mien, et ca fait du bien de voir des lignes correctement codées dans mon prog.

Thx.