using gd2 to display PI as color data abstractly
Posted: Tue Mar 15, 2016 8:11 am
I wanted to make PI into a code visually for fun. I took 100,000 digits of PI, divided by 6 for RGB HEX RRGGBB and made each digit into a decimal value including the dot, period, as A HEX.
0123456789.
0123456789A
This could be anything, use a Caesar cipher even. Whatever you want. It's low level encryption just for fun.
Then take the square root of the 100,000/6 so you can display it in a new canvas in gd2.
loop every 6 characters, break them into sets of 2, turn the "hex" into decimal and assign RR GG BB into dec,dec,dec
display and have fun imagining other ways to show data, store it, hide it with 4:4:4 to 4:2:0 compression with this data on top as "noise" in more complicated ways.
keep both files in the same folder. make sure your gd2 is on in your php.ini
pi_visual.php
pi.txt
this file has 100,000 digits of pi and the decimal point. phpbb has a 60,000 character limit per post, so here's the link (03-15-2016)
http://www.supercala.net/sites/gd2/pi/pi.txt
0123456789.
0123456789A
This could be anything, use a Caesar cipher even. Whatever you want. It's low level encryption just for fun.
Then take the square root of the 100,000/6 so you can display it in a new canvas in gd2.
loop every 6 characters, break them into sets of 2, turn the "hex" into decimal and assign RR GG BB into dec,dec,dec
display and have fun imagining other ways to show data, store it, hide it with 4:4:4 to 4:2:0 compression with this data on top as "noise" in more complicated ways.
keep both files in the same folder. make sure your gd2 is on in your php.ini
pi_visual.php
Code: Select all
<?php
/*
pi_visual.php v1.0 by Kristoffe Brodeur. ©2016 All Rights Reserved.
03-15-2016
*/
header('Content-type: image/png');
$file="pi.txt";
//
if(file_exists($file))
{
$handle=@fopen($file,"r");
$fileStr="";
//
while(!feof($handle))
{
$fileStr.=fgets($handle,4096);
}
}
$charArr=Array(
"0:0",
"1:1",
"2:2",
"3:3",
"4:4",
"5:5",
"6:6",
"7:7",
"8:8",
"9:9",
".:A"
);
$colorArr=Array();
$a=-1;
//
foreach($charArr as $data)
{
$a++;
$tmpArr=explode(":",$charArr[$a]);
$colorArr["{$tmpArr[0]}"]=$tmpArr[1];
}
$lenS=strlen($fileStr);
$hStr="";
//
for($a=0;$a<$lenS;$a++)
{
$hex1=substr($fileStr,$a,1);
$hStr.=$colorArr["{$hex1}"];
}
$lenRGB=floor(strlen($hStr)/6);// 123456 RRGGBB 24 bit color
//
$sqrtSize=sqrt($lenRGB);
$rowLim=floor($sqrtSize);
$col=-1;
$row=0;
$colLim=$sqrtSize;
$imgCanvas=imageCreateTrueColor($colLim,$rowLim);
//echo $lenS." ".($lenS/3)." $sqrtSize<br />";
//
for($b=0;$b<$lenRGB;$b++)
{
$col++;
//
if($col>$colLim)
{
$col=0;
$row++;
}
$valR=hexdec(substr($hStr,$b*6,2));
$valG=hexdec(substr($hStr,$b*6+2,2));
$valB=hexdec(substr($hStr,$b*6+4,2));
$piPixel=imagecolorallocate($imgCanvas,$valR,$valG,$valB);
imageSetPixel($imgCanvas,$col,$row,$piPixel);
//echo "$valR $valG $valB<br />";
}
imagepng($imgCanvas);
imagedestroy($imgCanvas);
?>
this file has 100,000 digits of pi and the decimal point. phpbb has a 60,000 character limit per post, so here's the link (03-15-2016)
http://www.supercala.net/sites/gd2/pi/pi.txt