BioPNG Source Code

From ArrayWiki

Jump to: navigation, search

[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;

}

?>

Personal tools