我有来自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 )。
非常感谢任何帮助。
答案 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);
?>