2009-04-07 8 views
0

J'essaie, pour des raisons que mon inconscient connaît le mieux, de générer une image ressemblant à une chute de neige.Problèmes avec imageetpixel et affichage de l'image avec php5 et gd 2.0 (ou plus, apparemment)

et GD En utilisant PHP5 v2.0 (ou supérieur), j'utilise le php/html suivant:

<?php 

      $x = $y = 100; 

      $gd = imagecreatetruecolor($x,$y); 

      $w = imagecolorallocate($gd, 255, 255, 255); 
      $b = imagecolorallocate($gd, 0, 0, 0); 


      for ($r=1; $r <= $y; $r++) { 

       for ($c=1; $c <= $x; $c++) { 


         if (rand(0,1) == 0) { 
          $rand = $w; 
            } 

         else { 
          $rand = $b; 
            } 

        imagesetpixel($gd,$r,$c,$rand); 

          } 


         } 


echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 

<head> 
    <title></title> 
    <link rel="stylesheet" type="text/css" href="css/stylesheet.css" /> 

</head> 

<body page="snowcrash2"> 

    <?php 

     echo "<div id=\"snowcrashimg\">"; 



header('Content-Type: image/png'); 
      imagepng($gd); 



     echo "</div>"; 


    ?> 

</body> 

</html> 

Je tentais de itérer sur chaque « colonne » de chaque « ligne » du image, définissant la valeur du pixel sur 1 ou 0 pour refléter le noir ou le blanc. Cependant, cela déclenche l'erreur (amusante): "Avertissement: Impossible de modifier les informations d'en-tête - les en-têtes déjà envoyés par (sortie démarrée à /var/www/play/snowcrash2.php:32) dans/var/www/play /snowcrash2.php on line 51 "

Le déplacement de l'en-tête (...) vers les premières lignes de la ligne (dans le but de placer l'en-tête quelque part où il pourrait être envoyé à temps) conduit à l'erreur suivante (sous forme d'image): l'image "http://127.0.0.1/play/snowcrash2.php" ne peut pas être affiché, car il contient des erreurs «

Umm ... aider


.?

Le seul autre sujet qui est apparu est celui-ci Generated image using PHP and GD is being cut off, qui n'a pas de réponse acceptée et n'est pas, autant que je puisse le voir, pertinent au problème que j'ai.

Répondre

1

Lorsqu'un navigateur affiche une image, elle est téléchargée séparément et placée sur une page. Pour cette raison, vous ne pouvez pas envoyer de code HTML et une image dans une seule requête. Ce que vous devez avoir est une page html/php qui a un tag avec le jeu src à une autre page qui enverra seulement les données pour l'image.

par exemple: (index.php)

<html> 
<body> 
<image src="pic.php" /> 
</body> 
</html> 

maintenant dans un autre fichier appelé (pic.php) vous générer l'image et envoyer le renvoyer à la réponse avec un en-tête de « type de contenu » et absolument rien d'autre (sauf pour les autres en-têtes peut-être)

par exemple, tiré de http://www.webdeveloper.com/forum/showpost.php?p=879552&postcount=2

<?php 

$number = ""; 
for ($i = 1; $i <= $lenght; $i++) 
{ 
    $number .= rand(0,9).""; 
} 

$width = 11*$lenght; 
$height = 30; 

$img = ImageCreate($width, $height); 
$background = imagecolorallocate($img,255,255,255); 
$color_black = imagecolorallocate($img,0,0,0); 
$color_grey = imagecolorallocate($img,169,169,169); 
imagerectangle($img,0, 0,$width-1,$height-1,$color_grey); 
imagestring($img, 5, $lenght, 7, $number, $color_black); 
//////// VERY IMPORTANT 
header('Content-Type: image/png'); 
//////// VERY IMPORTANT 
imagepng($img); 
imagedestroy($img); 

?> 
+0

vous, monsieur, êtes un génie * * merci! :) Tout ce que je veux faire maintenant est de le transformer en une fonction, et être capable de passer des valeurs x et y à partir d'un formulaire ... soupir ...;) –

+0

Pas de problème. Aussi pas besoin de faire une fonction, la balise

sera sur la page index.php avec l'action étant pic.php et ensuite lire les entrées de formulaires en utilisant $ _REQUEST ['x'] ou $ _GET ['x'] http://www.w3schools.com/PHP/php_get.asp pour plus d'informations. –

+0

I <3 Stackoverflow! :) –

Questions connexes