From ArrayWiki
[edit] Encoding/Compression
<?php
function bioPNGCompressLargeIntegerPixel($im, $x, $y, $long_val) {
$octets=decbin($long_val);
$octets = str_pad($octets,24,"0",STR_PAD_LEFT);
$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,bindec($octet[0]),bindec($octet[1]),bindec($octet[2])));
return;
}
function bioPNGCompressUint16_RGBPixel($im, $x, $y, $long_val) {
$octets=decbin($long_val);
$octets = str_pad($octets,16,"0",STR_PAD_LEFT);
if(strlen($octets) <= 16) {
$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,bindec($octet[1]),bindec($octet[0]),0));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,0,255));
}
return;
}
function bioPNGCompressUint16_GRBPixel($im, $x, $y, $long_val) {
$octets=decbin($long_val);
$octets = str_pad($octets,16,"0",STR_PAD_LEFT);
if(strlen($octets) <= 16) {
$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,bindec($octet[0]),bindec($octet[1]),0));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,0,255));
}
return;
}
function bioPNGCompressUint16_BGRPixel($im, $x, $y, $long_val) {
$octets=decbin($long_val);
$octets = str_pad($octets,16,"0",STR_PAD_LEFT);
if(strlen($octets) <= 16) {
$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,bindec($octet[0]),bindec($octet[1])));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,255,0,0));
}
return;
}
function bioPNGCompressUint16_GBRPixel($im, $x, $y, $long_val) {
$octets=decbin($long_val);
$octets = str_pad($octets,16,"0",STR_PAD_LEFT);
//$strleno = strlen($octets);
// echo "$octets . $strleno . ";
if(strlen($octets) <= 16) {
$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,bindec($octet[1]),bindec($octet[0])));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,255,0,0));
}
return;
}
function bioPNGCompressUint16_BRGPixel($im, $x, $y, $long_val) {
$octets=decbin($long_val);
$octets = str_pad($octets,16,"0",STR_PAD_LEFT);
if(strlen($octets) <= 16) {
$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,bindec($octet[0]),0,bindec($octet[1])));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,255,0));
}
return;
}
function bioPNGCompressUint16_RBGPixel($im, $x, $y, $long_val) {
$octets=decbin($long_val);
$octets = str_pad($octets,16,"0",STR_PAD_LEFT);
if(strlen($octets) <= 16) {
$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,bindec($octet[1]),0,bindec($octet[0])));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,255,0));
}
return;
}
function bioPNGCompressUint8_RGBPixel($im, $x, $y, $int8_val) {
//$octets=decbin($int8_val);
//$octets = str_pad($octets,8,"0",STR_PAD_LEFT);
//if(strlen($octets) <= 8) {
if($int8_val <= 255) {
///$octet=str_split($octets,8);
imagesetpixel($im,$x,$y,imagecolorallocate($im,$int8_val,0,0));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,0,255));
}
return;
}
function bioPNGCompressUint8_GRBPixel($im, $x, $y, $int8_val) {
if($int8_val <= 255) {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,$int8_val,0));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,0,255));
}
return;
}
function bioPNGCompressUint8_GBRPixel($im, $x, $y, $int8_val) {
if($int8_val <= 255) {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,$int8_val,0));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,255,0,0));
}
return;
}
function bioPNGCompressUint8_BGRPixel($im, $x, $y, $int8_val) {
if($int8_val <= 255) {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,0,$int8_val));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,255,0,0));
}
return;
}
function bioPNGCompressUint8_RBGPixel($im, $x, $y, $int8_val) {
if($int8_val <= 255) {
imagesetpixel($im,$x,$y,imagecolorallocate($im,$int8_val,0,0));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,255,0));
}
return;
}
function bioPNGCompressUint8_BRGPixel($im, $x, $y, $int8_val) {
if($int8_val <= 255) {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,0,$int8_val));
} else {
imagesetpixel($im,$x,$y,imagecolorallocate($im,0,255,0));
}
return;
}
function bioPNGCompressCustomPixel($im,$x,$y,$count,$colorstring,$invert=false) {
$set_test = "1";
$prob = false;
$done = false;
if(substr($colorstring,0,1) == ".") {
//echo ".";
$prob = true;
$colorstring = substr($colorstring,1);
}
//if($invert) {
// $set_test = "0";
//}
$numbits = round(strlen($colorstring)/2);
//echo "$numbits\n";
$r = "00000000";
$g = "00000000";
$b = "00000000";
$a = "0000000";
if($prob) {
$octets = floatbin($count,$numbits,false);
} else {
$octets = decbin($count);
}
if(strlen($octets) > $numbits)
{
$g = "11111111";
$b = "11111111";
$done = true;
}
else
{
$octets = str_pad($octets,$numbits,"0",STR_PAD_LEFT);
}
//echo "$octets \n";
if(!$done)
{
$octets = str_split($octets,1);
$custom = str_split($colorstring,2);
foreach($custom as $i => $instr)
{
//echo " $i $instr ";
if($octets[$i] == $set_test)
{
$instr_parts = str_split($instr,1);
switch($instr_parts[0])
{
case "r":
$r = substr_replace($r,"1",7-$instr_parts[1],1);
break;
case "g":
$g = substr_replace($g,"1",7-$instr_parts[1],1);
break;
case "b":
$b = substr_replace($b,"1",7-$instr_parts[1],1);
break;
case "w":
$r = substr_replace($r,"1",7-$instr_parts[1],1);
$g = substr_replace($g,"1",7-$instr_parts[1],1);
$b = substr_replace($b,"1",7-$instr_parts[1],1);
break;
case "a":
$a = substr_replace($a,"1",6-$instr_parts[1],1);
break;
}
}
}
}
//echo "\n$r $g $b $a\n";
$r = bindec($r);
$g = bindec($g);
$b = bindec($b);
$a = bindec($a);
if($invert)
{
$r = 255-$r;
$g = 255-$g;
$b = 255-$b;
//$a = 127-$a;
}
//echo " $r $g $b $a\n<BR>";
imagesetpixel( $im,$x,$y,imagecolorallocatealpha($im,$r,$g,$b,$a));
return;
}
function bioPNGCompressCustomBand($im,$x1,$x2,$y1,$y2,$count,$colorstring,$invert=false) {
$set_test = "1";
//if($invert) {
// $set_test = "0";
//}
$numbits = round(strlen($colorstring)/2);
//echo "$numbits\n";
$r = "00000000";
$g = "00000000";
$b = "00000000";
$a = "0000000";
$octets = decbin($count);
if(strlen($octets) > $numbits)
{
$g = "11111111";
$b = "11111111";
$done = true;
}
else
{
$octets = str_pad($octets,$numbits,"0",STR_PAD_LEFT);
}
//echo "$octets\n";
if(!$done)
{
$octets = str_split($octets,1);
$custom = str_split($colorstring,2);
foreach($custom as $i => $instr)
{
//echo "$i";
if($octets[$i] == $set_test)
{
$instr_parts = str_split($instr,1);
switch($instr_parts[0])
{
case "r":
$r = substr_replace($r,"1",7-$instr_parts[1],1);
break;
case "g":
$g = substr_replace($g,"1",7-$instr_parts[1],1);
break;
case "b":
$b = substr_replace($b,"1",7-$instr_parts[1],1);
break;
case "w":
$r = substr_replace($r,"1",7-$instr_parts[1],1);
$g = substr_replace($g,"1",7-$instr_parts[1],1);
$b = substr_replace($b,"1",7-$instr_parts[1],1);
break;
case "a":
$a = substr_replace($a,"1",6-$instr_parts[1],1);
break;
}
}
}
}
//echo "\n$r $g $b $a\n";
$r = bindec($r);
$g = bindec($g);
$b = bindec($b);
$a = bindec($a);
if($invert)
{
$r = 255-$r;
$g = 255-$g;
$b = 255-$b;
//$a = 127-$a;
}
//echo "$r $g $b $a\n";
imageline( $im,$x1,$y1,$x2,$y2,imagecolorallocatealpha($im,$r,$g,$b,$a));
return;
}
function bioPNGCompressGelPlotPixel($im,$x,$y1,$y2,$count) {
$octets=decbin($count);
$octets = str_pad($octets,16,"0",STR_PAD_LEFT);
//$octet=str_split($octets,2);
$octet=str_split($octets,8);
$pair=str_split($octets,2);
echo "$octet[0] $octet[1]\n";
if($octet[0] = "00000000")
{
//$red = 0;
//$blue = bindec($pair[0].$pair[2].$pair[4].$pair[6]);
//$blue = bindec($octet[0]);
$white = 255-bindec("0000".$pair[5].$pair[6]);
//$white = 255-bindec($octet[1]);
$blue = 255-bindec("0000".$pair[7]."00");
$red = 255-bindec("0000".$pair[8]."00");
}
else
{
$white = 255-bindec($octet[0]);
$blue = 255-bindec($pair[5].$pair[7]);
$red = 255-bindec($pair[6].$pair[8]);
}
echo "$red $white $blue\n";
imageline( $im,$x,$y1,$x,$y2,imagecolorallocate($im,$red,$white,$blue));
return;
}
function bioPNGCompressExpressionPixel($im, $x, $y, $expr_val) {
$colors = Array();
$integerPart = intval($expr_val);
$decimalPart = floatbin($expr_val,16,false);
$octet=str_split($decimalPart,8);
$colors[0]=$integerPart;
$colors[1]=bindec($octet[0]);
$colors[2]=bindec($octet[1]);
//echo "$colors[0] $colors[1] $colors[2] \n";
return imagesetpixel($im,$x,$y,imagecolorallocate($im,$colors[0],$colors[2],$colors[1]));
}
function bioPNGCompressProbabilityPixel($im, $x, $y, $prob_val) {
$colors = Array();
//$integerPart = intval($expr_val);
$decimalPart = floatbin($prob_val,24,false);
$octet=str_split($decimalPart,8);
$colors[0]=bindec($octet[0]);
$colors[1]=bindec($octet[1]);
$colors[2]=bindec($octet[2]);
//echo "$colors[0] $colors[1] $colors[2] \n";
return imagesetpixel($im,$x,$y,imagecolorallocate($im,$colors[0],$colors[1],$colors[2]));
}
function bioPNGCompressNumPixelsPixel($im, $x, $y, $npxl_val, $background) {
$npxl_val = $npxl_val*4;
if($x == 0 && $y == 0)
{
$bg = $npxl_val;
$background=imagecolorallocate($im,$bg,$bg,$bg);
imagefill($im,0,0,$background);
}
elseif($npxl_val != $background)
{
imagesetpixel($im,$x,$y,imagecolorallocate($im,$npxl_val,$npxl_val,$npxl_val));
}
return;
}
function bioPNGCompressUint6Pixel($im, $x, $y, $npxl_val, $background) {
$octets=decbin($npxl_val);
$octets = str_pad($octets,6,"0",STR_PAD_LEFT);
$octets = $octets."00";
$npxl_val = bindec($octets);
//$npxl_val = $npxl_val*4;
if($x == 0 && $y == 0)
{
$bg = $npxl_val;
$background=imagecolorallocate($im,$bg,$bg,$bg);
imagefill($im,0,0,$background);
}
elseif($npxl_val != $background)
{
imagesetpixel($im,$x,$y,imagecolorallocate($im,$npxl_val,$npxl_val,$npxl_val));
}
return;
}
function bioPNGCompressUint8Pixel($im, $x, $y, $npxl_val, $background) {
//$npxl_val = $npxl_val*4;
if($x == 0 && $y == 0)
{
$bg = $npxl_val;
$background=imagecolorallocate($im,$bg,$bg,$bg);
imagefill($im,0,0,$background);
}
elseif($npxl_val != $background)
{
imagesetpixel($im,$x,$y,imagecolorallocate($im,$npxl_val,$npxl_val,$npxl_val));
}
return;
}
function bioPNGCompressIntensityPixel($im, $x, $y, $ints_val) {
$colors = Array();
$nbr=floatbin($ints_val,8,true);
$nbr= explode(".",$nbr);
$integerPart=$nbr[0];
//$octets=decbin($integerPart);
//while (strlen($octets)<16) {
// $octets="0".$octets;
//}
$octets = str_pad($integerPart,16,"0",STR_PAD_LEFT);
//echo $octets."\n";
//$octets = $pad[strlen($octets)].$octets;
$octet=str_split($octets,8);
$colors[0]=bindec($octet[0]);
$colors[1]=bindec($octet[1]);
// this was bad encoding
//$colors[2]=substr(str_pad($nbr[1],2,"0"),0,2);
$colors[2]=bindec($nbr[1]);
return imagesetpixel($im,$x,$y,imagecolorallocate($im,$colors[2],$colors[0],$colors[1]));
}
function bioPNGCompressStdDevPixel($im, $x, $y, $stdv_val)
{
$colors = Array();
$nbr=floatbin($stdv_val,8,true);
//$offset = strpos($stdv_val,".");
$nbr= explode(".",$nbr);
$integerPart=$nbr[0];
//$integerPart=substr($stdv_val,0,$offset);
//$octets=decbin($integerPart);
//while (strlen($octets)<16) {
// $octets="0".$octets;
//}
$octets = str_pad($integerPart,16,"0",STR_PAD_LEFT);
//str_pad($octets,16,"0",STR_PAD_LEFT);
$octet=str_split($octets,8);
$colors[0]=bindec($octet[0]);
$colors[1]=bindec($octet[1]);
// this was bad encoding
//$colors[2]=substr(str_pad($nbr[1],2,"0"),0,2);
//$colors[2]=substr($stdv_val,$offset+1,2);
$colors[2]=bindec($nbr[1]);
//echo "$colors[0] $colors[1] $colors[2] \n";
return imagesetpixel($im,$x,$y,imagecolorallocate($im,$colors[2],$colors[1],$colors[0]));
}
function floatbin($myfloat, $precision=16, $return_int_part=true)
{
//echo "complete: $myfloat\n";
$binary_string = "";
if($return_int_part)
{
$binary_string = decbin($myfloat);
$binary_string .= ".";
$fractional_part = $myfloat-intval($myfloat);
}
else
{
$fractional_part = explode(".",$myfloat);
$fractional_part = ".".$fractional_part[1];
}
//echo "fractional: $fractional_part\n";
for ($i=1; $i < $precision+1; $i++)
{
$binary_fraction = 1/pow(2,$i);
if($fractional_part >= $binary_fraction)
{
$binary_string .= "1";
$fractional_part = $fractional_part - $binary_fraction;
}
else
{
$binary_string .= "0";
}
if($fractional_part == 0)
{
break;
}
//echo "order: $binary_fraction\t\t";
//echo "state: $fractional_part\n";
}
if(!$return_int_part)
{
}
return $binary_string;
}
?>
[edit] Decoding/Decompression
<?php
function bioPNGReadLargeIntegerPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = decbin(($rgb >> 16) & 0xFF);
$g = decbin(($rgb >> 8) & 0xFF);
$g = str_pad($g,8,"0",STR_PAD_LEFT);
$b = decbin($rgb & 0xFF);
$b = str_pad($b,8,"0",STR_PAD_LEFT);
$octets=$r.$g.$b;
return bindec($octets);
}
function bioPNGReadUint16_GRBPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = decbin(($rgb >> 16) & 0xFF);
$g = decbin(($rgb >> 8) & 0xFF);
$b = $rgb & 0xFF;
if($b==255) {
$octets = "1111111111111111";
} else {
$g = str_pad($g,8,"0",STR_PAD_LEFT);
$octets=$r.$g;
}
return bindec($octets);
}
function bioPNGReadUint16_RGBPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = decbin(($rgb >> 16) & 0xFF);
$g = decbin(($rgb >> 8) & 0xFF);
$b = $rgb & 0xFF;
if($b==255) {
$octets = "1111111111111111";
} else {
$r = str_pad($r,8,"0",STR_PAD_LEFT);
$octets=$g.$r;
}
return bindec($octets);
}
function bioPNGReadUint16_GBRPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = decbin(($rgb >> 8) & 0xFF);
$b = decbin($rgb & 0xFF);
if($r==255) {
$octets = "1111111111111111";
} else {
$g = str_pad($g,8,"0",STR_PAD_LEFT);
$octets=$b.$g;
}
return bindec($octets);
}
function bioPNGReadUint16_BGRPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = decbin(($rgb >> 8) & 0xFF);
$b = decbin($rgb & 0xFF);
if($r==255) {
$octets = "1111111111111111";
} else {
$b = str_pad($b,8,"0",STR_PAD_LEFT);
$octets=$g.$b;
}
return bindec($octets);
}
function bioPNGReadUint16_RBGPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = decbin($rgb & 0xFF);
if($g==255) {
$octets = "1111111111111111";
} else {
$r = str_pad($r,8,"0",STR_PAD_LEFT);
$octets=$b.$r;
}
return bindec($octets);
}
function bioPNGReadUint16_BRGPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = decbin($rgb & 0xFF);
if($g==255) {
$octets = "1111111111111111";
} else {
$b = str_pad($b,8,"0",STR_PAD_LEFT);
$octets=$r.$b;
}
return bindec($octets);
}
function bioPNGReadUint8_RGBPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$val = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if($b==255) {
$val = 255;
}
return $val;
}
function bioPNGReadUint8_GRBPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$val = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if($b==255) {
$val = 255;
}
return $val;
}
function bioPNGReadUint8_BGRPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$val = $rgb & 0xFF;
if($r==255) {
$val = 255;
}
return $val;
}
function bioPNGReadUint8_GBRPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$val = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if($r==255) {
$val = 255;
}
return $val;
}
function bioPNGReadUint8_BRGPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$val = $rgb & 0xFF;
if($g==255) {
$val = 255;
}
return $val;
}
function bioPNGReadUint8_RBGPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$val = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
if($g==255) {
$val = 255;
}
return $val;
}
function bioPNGReadProbabilityPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = decbin(($rgb >> 16) & 0xFF);
$r = str_pad($r,8,"0",STR_PAD_LEFT);
$g = decbin(($rgb >> 8) & 0xFF);
$g = str_pad($g,8,"0",STR_PAD_LEFT);
$b = decbin($rgb & 0xFF);
$b = str_pad($b,8,"0",STR_PAD_LEFT);
$octets=".".$r.$g.$b;
//echo "$octets\n";
return binfloat($octets);
}
function bioPNGReadIntensityPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = decbin(($rgb >> 16) & 0xFF);
$g = decbin(($rgb >> 8) & 0xFF);
$b = decbin($rgb & 0xFF);
//while (strlen($b)<8) {
// $b='0'.$b;
//}
$b = str_pad($b,8,"0",STR_PAD_LEFT);
//$r = str_pad($r,2,"0",STR_PAD_LEFT);
$r = str_pad($r,8,"0",STR_PAD_LEFT);
//$integerPart = bindec($g.$b);
//$stdev = $integerPart.'.'.binfloat($r);
$ints = binfloat($g.$b.'.'.$r);
return $ints;
}
function bioPNGReadExpressionPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = decbin(($rgb >> 8) & 0xFF);
$b = decbin($rgb & 0xFF);
//while (strlen($b)<8) {
// $b='0'.$b;
//}
$g = str_pad($g,8,"0",STR_PAD_LEFT);
//$dec = bindec($b.$r);
$dec = binfloat('.'.$b.$g);
//$dec = str_pad($dec,4,"0",STR_PAD_LEFT);
return $r+$dec;
}
function bioPNGReadNumPixelsPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
$r = ($rgb >> 16) & 0xFF;
//$g = ($rgb >> 8) & 0xFF;
//$b = $rgb & 0xFF;
return $r/4;
}
function bioPNGReadStdDevPixel($im, $x, $y) {
$rgb = ImageColorAt($im, $x, $y);
//$r = ($rgb >> 16) & 0xFF;
$r = decbin(($rgb >> 16) & 0xFF);
$g = decbin(($rgb >> 8) & 0xFF);
$b = decbin($rgb & 0xFF);
//while (strlen($b)<8) {
// $b='0'.$b;
//}
$g = str_pad($g,8,"0",STR_PAD_LEFT);
//$r = str_pad($r,2,"0",STR_PAD_LEFT);
$r = str_pad($r,8,"0",STR_PAD_LEFT);
//$integerPart = bindec($b.$g);
//$stdev = $integerPart.'.'.binfloat($r);
$stdev = binfloat($b.$g.'.'.$r);
return $stdev;
}
function bioPNGReadCustomPixel($im,$x,$y,$colorstring,$invert=false) {
$rgba = ImageColorAt($im, $x, $y);
$a = ($rgba & 0x7F000000) >> 24;
$r = ($rgba >> 16) & 0xFF;
$g = ($rgba >> 8) & 0xFF;
$b = $rgba & 0xFF;
if($invert)
{
$r = 255-$r;
$g = 255-$g;
$b = 255-$b;
//$a = 127-$a;
}
$a = str_pad(decbin($a),7,"0",STR_PAD_LEFT);
//$r = ($rgb >> 16) & 0xFF;
$r = str_pad(decbin($r),8,"0",STR_PAD_LEFT);
$g = str_pad(decbin($g),8,"0",STR_PAD_LEFT);
$b = str_pad(decbin($b),8,"0",STR_PAD_LEFT);
$prob = false;
if(substr($colorstring,0,1) == ".") {
//echo ".";
$prob = true;
$colorstring = substr($colorstring,1);
}
$val = "";
$custom = str_split($colorstring,2);
foreach($custom as $i => $instr)
{
$instr_parts = str_split($instr,1);
switch($instr_parts[0])
{
case "r":
$val = $val.substr($r,7-$instr_parts[1],1);
break;
case "g":
$val = $val.substr($g,7-$instr_parts[1],1);
break;
case "b":
$val = $val.substr($b,7-$instr_parts[1],1);
break;
case "w":
$val = $val.substr($r,7-$instr_parts[1],1);
break;
case "a":
$val = $val.substr($a,6-$instr_parts[1],1);
break;
}
}
echo "$val : ";
if($prob) {
$val = binfloat($val);
} else {
$val = bindec($val);
}
echo "$val<BR>";
return $val;
}
function binfloat($binary_string) {
$myfloat = -1;
$parts = explode(".",$binary_string);
$int_part = $parts[0];
if(count($parts) > 1) {
$fraction_part = str_split($parts[1],1);
}
$myfloat = bindec($int_part);
for ($i=0; $i < count($fraction_part); $i++) {
$binary_fraction = 1/pow(2,$i+1);
if($fraction_part[$i] == "1") {
$myfloat = $myfloat + $binary_fraction;
}
}
return $myfloat;
}
?>