不输出到映像文件


Does not output to the image file

我有这个PHP程序从http://www.hithlonde.com/pi/#files。该程序应该将pi的数字转换为单独的颜色(每个像素一个数字)并将其保存到图像文件中,如下图所示:http://www.hithlonde.com/pi/Pi1024x768.gif。但是我的代码的输出是二进制在调试控制台中。像这样:

¡¢£¤¥¦§¨©ª«¬®¯

代码如下:

 <?php
//Title:
//  Pi Graphical Visualization Script
//Date:
//  03.14.07
//Author:
//  Tim Habersack
//Descript: 
//  Reads in the digits of pi, assigns a color to each number 0-9, 
//  then outputs to an image with one pixel representing a number.
//Notes:
//  (http://www.hithlonde.com/pi/pi) is where I obtained the pi file, 
//  calculated to over 4 million decimal places.  The GD library
//  in your php config must be enabled for this to function.
//E-mail:
//  tim@hithlonde.com
//Copyright:
//  Released under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License
function NumToColor($ImagePassed, $NumPassed)
{
    $the0 = imagecolorallocate($ImagePassed, 0xFF, 0xFF, 0xFF);
    $the1 = imagecolorallocate($ImagePassed, 0x00, 0xFF, 0xFF);
    $the2 = imagecolorallocate($ImagePassed, 0x00, 0x00, 0xFF);
    $the3 = imagecolorallocate($ImagePassed, 0xFF, 0x00, 0xFF);
    $the4 = imagecolorallocate($ImagePassed, 0x00, 0xFF, 0x00);
    $the5 = imagecolorallocate($ImagePassed, 0xFF, 0xA5, 0x00);
    $the6 = imagecolorallocate($ImagePassed, 0xFF, 0x00, 0x00);
    $the7 = imagecolorallocate($ImagePassed, 0xFF, 0xFF, 0x00);
    $the8 = imagecolorallocate($ImagePassed, 0x80, 0x80, 0x80);
    $the9 = imagecolorallocate($ImagePassed, 0x00, 0x00, 0x00);
    switch ($NumPassed)
    {
    case 0:
        return $the0;
        break;
    case 1:
        return $the1;
        break;
    case 2:
        return $the2;
        break;
    case 3:
        return $the3;
        break;
    case 4:
        return $the4;
        break;
    case 5:
        return $the5;
        break;
    case 6:
        return $the6;
        break;
    case 7:
        return $the7;
        break;
    case 8:
        return $the8;
        break;
    case 9:
        return $the9;
        break;
    }   
}
//Set the size of the pi image
$x = 300;
$y = 300;
$gd = imagecreatetruecolor($x, $y);
//Connect the pi file to variable 
$theTestPi = file_get_contents("pi.txt");
$theGoodPi = "";
$PiWalker = 0;
//gets the # of digits needed, plus some extra for the 'r dropped off, reads into var
while ($PiWalker < $x * $y * 1.1)
{
    if ($theTestPi[$PiWalker] == "'r")
    {   
        $PiWalker++;
    }
    else
    {
        $theGoodPi = $theGoodPi . $theTestPi[$PiWalker];
    }
    $PiWalker++;    
}
$PiWalker = 0;
//walks through the image, painting the pi characters pixel by pixel
for ($theY = 0; $theY < $y; $theY++)
{
    for ($theX = 0; $theX < $x; $theX++)
    {
        imagesetpixel($gd, $theX, $theY, NumToColor($gd, $theGoodPi[$PiWalker]));
        $PiWalker++;
    }
}
header('Content-Type: image/png');
imagepng($gd);
?> 

我用 Netbeans IDE 8.0 Xampp编译器版本 1.8.3-4 ( PHP 版本 5.5.11 )。

1)删除开始php标记前的单个空白。2)不需要创建"$theGoodPi",只需要使用testpi,它只是复制它。这会让你花更长的时间却一无所获。3)$theTestPi = file_get_contents("http://www.hithlonde.com/pi/pi");
您可能不需要更改34)imagesetpixel($gd, $theX, $theY, NumToColor($gd, $theTestPi[$PiWalker]));如果删除上面的while循环(见2),则更改为testpi

你真正需要做的就是通过lol删除开始php标记之前的单个空格。

<?php
//Title:
//  Pi Graphical Visualization Script
//Date:
//  03.14.07
//Author:
//  Tim Habersack
//Descript: 
//  Reads in the digits of pi, assigns a color to each number 0-9, 
//  then outputs to an image with one pixel representing a number.
//Notes:
//  (http://www.hithlonde.com/pi/pi) is where I obtained the pi file, 
//  calculated to over 4 million decimal places.  The GD library
//  in your php config must be enabled for this to function.
//E-mail:
//  tim@hithlonde.com
//Copyright:
//  Released under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License
function NumToColor($ImagePassed, $NumPassed)
{
    $the0 = imagecolorallocate($ImagePassed, 0xFF, 0xFF, 0xFF);
    $the1 = imagecolorallocate($ImagePassed, 0x00, 0xFF, 0xFF);
    $the2 = imagecolorallocate($ImagePassed, 0x00, 0x00, 0xFF);
    $the3 = imagecolorallocate($ImagePassed, 0xFF, 0x00, 0xFF);
    $the4 = imagecolorallocate($ImagePassed, 0x00, 0xFF, 0x00);
    $the5 = imagecolorallocate($ImagePassed, 0xFF, 0xA5, 0x00);
    $the6 = imagecolorallocate($ImagePassed, 0xFF, 0x00, 0x00);
    $the7 = imagecolorallocate($ImagePassed, 0xFF, 0xFF, 0x00);
    $the8 = imagecolorallocate($ImagePassed, 0x80, 0x80, 0x80);
    $the9 = imagecolorallocate($ImagePassed, 0x00, 0x00, 0x00);
    switch ($NumPassed)
    {
    case 0:
        return $the0;
        break;
    case 1:
        return $the1;
        break;
    case 2:
        return $the2;
        break;
    case 3:
        return $the3;
        break;
    case 4:
        return $the4;
        break;
    case 5:
        return $the5;
        break;
    case 6:
        return $the6;
        break;
    case 7:
        return $the7;
        break;
    case 8:
        return $the8;
        break;
    case 9:
        return $the9;
        break;
    }   
}
//Set the size of the pi image
$x = 300;
$y = 300;
$gd = imagecreatetruecolor($x, $y);
//Connect the pi file to variable 
$theTestPi = file_get_contents("http://www.hithlonde.com/pi/pi");
$theGoodPi = "";
$PiWalker = 0;
//gets the # of digits needed, plus some extra for the 'r dropped off, reads into var
while ($PiWalker < $x * $y * 1.1)
{
    if ($theTestPi[$PiWalker] == "'r")
    {   
        $PiWalker++;
    }
    else
    {
        $theGoodPi = $theGoodPi . $theTestPi[$PiWalker];
    }
    $PiWalker++;    
}
$PiWalker = 0;
//walks through the image, painting the pi characters pixel by pixel
for ($theY = 0; $theY < $y; $theY++)
{
    for ($theX = 0; $theX < $x; $theX++)
    {
        imagesetpixel($gd, $theX, $theY, NumToColor($gd, $theGoodPi[$PiWalker]));
        $PiWalker++;
    }
}
header('Content-Type: image/png');
imagepng($gd); 
?>