不输出到图像文件

时间:2014-06-08 03:52:42

标签: php image hex pi

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

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

以下是代码:

 <?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 )。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

1)在打开php标记之前删除单个空格。 2)没有必要创建&#34; $ theGoodPi&#34;,只需使用TestPi,它只是复制它。这使得它需要更长的时间。 3)$ theTestPi = file_get_contents(&#34; http://www.hithlonde.com/pi/pi&#34;);
您可能不需要更改3 4)imagesetpixel($ gd,$ theX,$ theY,NumToColor($ gd,$ theTestPi [$ PiWalker])); 如果删除上面的while循环,请更改为TestPi(参见2)

您真正需要做的就是在打开php标签之前删除单个空格,尽管大声笑。

答案 1 :(得分:0)

<?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); 

?>