我有这个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);
?>