Example #1
0
function imagebmp($img,$file="",$RLE=0)
{
	$ColorCount=imagecolorstotal($img);
	$Transparent=imagecolortransparent($img);
	$IsTransparent=$Transparent!=-1;
	if($IsTransparent) $ColorCount--;
	if($ColorCount==0) {$ColorCount=0; $BitCount=24;};
	if(($ColorCount>0)and($ColorCount<=2)) {$ColorCount=2; $BitCount=1;};
	if(($ColorCount>2)and($ColorCount<=16)) { $ColorCount=16; $BitCount=4;};
	if(($ColorCount>16)and($ColorCount<=256)) { $ColorCount=0; $BitCount=8;};
	$Width=imagesx($img);
	$Height=imagesy($img);
	$Zbytek=(4-($Width/(8/$BitCount))%4)%4;
	if($BitCount<24) $palsize=pow(2,$BitCount)*4;
	$size=(floor($Width/(8/$BitCount))+$Zbytek)*$Height+54;
	$size+=$palsize;
	$offset=54+$palsize;
	$ret = 'BM';                      
	$ret .= int_to_dword($size);    
	$ret .= int_to_dword(0);       
	$ret .= int_to_dword($offset);     
	$ret .= int_to_dword(40);       
	$ret .= int_to_dword($Width);       
	$ret .= int_to_dword($Height);       
	$ret .= int_to_word(1);       
	$ret .= int_to_word($BitCount);      
	$ret .= int_to_dword($RLE);       
	$ret .= int_to_dword(0);       
	$ret .= int_to_dword(0);       
	$ret .= int_to_dword(0);       
	$ret .= int_to_dword(0);       
	$ret .= int_to_dword(0);       
	$CC=$ColorCount;
	$sl1=strlen($ret);
	if($CC==0) $CC=256;
	if($BitCount<24)
	{
		$ColorTotal=imagecolorstotal($img);
		if($IsTransparent) $ColorTotal--;
		for($p=0;$p<$ColorTotal;$p++)
		{
			$color=imagecolorsforindex($img,$p);
			$ret.=inttobyte($color["blue"]);
			$ret.=inttobyte($color["green"]);
			$ret.=inttobyte($color["red"]);
			$ret.=inttobyte(0); 
		};
		$CT=$ColorTotal;
		for($p=$ColorTotal;$p<$CC;$p++)
		{
			$ret.=inttobyte(0);
			$ret.=inttobyte(0);
			$ret.=inttobyte(0);
			$ret.=inttobyte(0); 
		};
	};
	if($BitCount<=8)
	{
		for($y=$Height-1;$y>=0;$y--)
		{
			$bWrite="";
			for($x=0;$x<$Width;$x++)
			{
				$color=imagecolorat($img,$x,$y);
				$bWrite.=decbinx($color,$BitCount);
				if(strlen($bWrite)==8)
				{
					$retd.=inttobyte(bindec($bWrite));
					$bWrite="";
				};
			};
			if((strlen($bWrite)<8)and(strlen($bWrite)!=0))
			{
				$sl=strlen($bWrite);
				for($t=0;$t<8-$sl;$t++)
				$sl.="0";
				$retd.=inttobyte(bindec($bWrite));
			};
			for($z=0;$z<$Zbytek;$z++)
			$retd.=inttobyte(0);
		};
	};
	if(($RLE==1)and($BitCount==8))
	{
		for($t=0;$t<strlen($retd);$t+=4)
		{
			if($t!=0)
			if(($t)%$Width==0)
			$ret.=chr(0).chr(0);

			if(($t+5)%$Width==0)
			{
				$ret.=chr(0).chr(5).substr($retd,$t,5).chr(0);
				$t+=1;
			}
			if(($t+6)%$Width==0)
			{
				$ret.=chr(0).chr(6).substr($retd,$t,6);
				$t+=2;
			}
			else
			{
				$ret.=chr(0).chr(4).substr($retd,$t,4);
			};
		};
		$ret.=chr(0).chr(1);
	}
	else
	{
		$ret.=$retd;
	};
	if($BitCount==24)
	{
		for($z=0;$z<$Zbytek;$z++)
		$Dopl.=chr(0);

		for($y=$Height-1;$y>=0;$y--)
		{
			for($x=0;$x<$Width;$x++)
			{
				$color=imagecolorsforindex($img,ImageColorAt($img,$x,$y));
				$ret.=chr($color["blue"]).chr($color["green"]).chr($color["red"]);
			}
			$ret.=$Dopl;
		};

	};
	if($file!="")
	{
		$r=($f=fopen($file,"w"));
		$r=$r and fwrite($f,$ret);
		$r=$r and fclose($f);
		return $r;
	}
	else
	{
		echo $ret;
	};
};
Example #2
0
function imagebmp($img, $file = "", $RLE = 0)
{
    $ColorCount = imagecolorstotal($img);
    $Transparent = imagecolortransparent($img);
    $IsTransparent = $Transparent != -1;
    if ($IsTransparent) {
        $ColorCount--;
    }
    if ($ColorCount == 0) {
        $ColorCount = 0;
        $BitCount = 24;
    }
    if ($ColorCount > 0 and $ColorCount <= 2) {
        $ColorCount = 2;
        $BitCount = 1;
    }
    if ($ColorCount > 2 and $ColorCount <= 16) {
        $ColorCount = 16;
        $BitCount = 4;
    }
    if ($ColorCount > 16 and $ColorCount <= 256) {
        $ColorCount = 0;
        $BitCount = 8;
    }
    $Width = imagesx($img);
    $Height = imagesy($img);
    $Zbytek = (4 - $Width / (8 / $BitCount) % 4) % 4;
    $palsize = 0;
    // cid added
    if ($BitCount < 24) {
        $palsize = pow(2, $BitCount) * 4;
    }
    $size = (floor($Width / (8 / $BitCount)) + $Zbytek) * $Height + 54;
    $size += $palsize;
    $offset = 54 + $palsize;
    // Bitmap File Header
    $ret = 'BM';
    // header (2b)
    $ret .= int_to_dword($size);
    // size of file (4b)
    $ret .= int_to_dword(0);
    // reserved (4b)
    $ret .= int_to_dword($offset);
    // byte location in the file which is first byte of IMAGE (4b)
    // Bitmap Info Header
    $ret .= int_to_dword(40);
    // Size of BITMAPINFOHEADER (4b)
    $ret .= int_to_dword($Width);
    // width of bitmap (4b)
    $ret .= int_to_dword($Height);
    // height of bitmap (4b)
    $ret .= int_to_word(1);
    // biPlanes = 1 (2b)
    $ret .= int_to_word($BitCount);
    // biBitCount = {1 (mono) or 4 (16 clr ) or 8 (256 clr) or 24 (16 Mil)} (2b)
    $ret .= int_to_dword($RLE);
    // RLE COMPRESSION (4b)
    $ret .= int_to_dword(0);
    // width x height (4b)
    $ret .= int_to_dword(0);
    // biXPelsPerMeter (4b)
    $ret .= int_to_dword(0);
    // biYPelsPerMeter (4b)
    $ret .= int_to_dword(0);
    // Number of palettes used (4b)
    $ret .= int_to_dword(0);
    // Number of important colour (4b)
    // image data
    $CC = $ColorCount;
    $sl1 = strlen($ret);
    if ($CC == 0) {
        $CC = 256;
    }
    if ($BitCount < 24) {
        $ColorTotal = imagecolorstotal($img);
        if ($IsTransparent) {
            $ColorTotal--;
        }
        for ($p = 0; $p < $ColorTotal; $p++) {
            $color = imagecolorsforindex($img, $p);
            $ret .= inttobyte($color["blue"]);
            $ret .= inttobyte($color["green"]);
            $ret .= inttobyte($color["red"]);
            $ret .= inttobyte(0);
            //RESERVED
        }
        $CT = $ColorTotal;
        for ($p = $ColorTotal; $p < $CC; $p++) {
            $ret .= inttobyte(0);
            $ret .= inttobyte(0);
            $ret .= inttobyte(0);
            $ret .= inttobyte(0);
            //RESERVED
        }
    }
    $retd = '';
    // cid added
    if ($BitCount <= 8) {
        for ($y = $Height - 1; $y >= 0; $y--) {
            $bWrite = "";
            for ($x = 0; $x < $Width; $x++) {
                $color = imagecolorat($img, $x, $y);
                $bWrite .= decbinx($color, $BitCount);
                if (strlen($bWrite) == 8) {
                    $retd .= inttobyte(bindec($bWrite));
                    $bWrite = "";
                }
            }
            if (strlen($bWrite) < 8 and strlen($bWrite) != 0) {
                $sl = strlen($bWrite);
                for ($t = 0; $t < 8 - $sl; $t++) {
                    $sl .= "0";
                }
                $retd .= inttobyte(bindec($bWrite));
            }
            for ($z = 0; $z < $Zbytek; $z++) {
                $retd .= inttobyte(0);
            }
        }
    }
    if ($RLE == 1 and $BitCount == 8) {
        for ($t = 0; $t < strlen($retd); $t += 4) {
            if ($t != 0) {
                if ($t % $Width == 0) {
                    $ret .= chr(0) . chr(0);
                }
            }
            if (($t + 5) % $Width == 0) {
                $ret .= chr(0) . chr(5) . substr($retd, $t, 5) . chr(0);
                $t += 1;
            }
            if (($t + 6) % $Width == 0) {
                $ret .= chr(0) . chr(6) . substr($retd, $t, 6);
                $t += 2;
            } else {
                $ret .= chr(0) . chr(4) . substr($retd, $t, 4);
            }
        }
        $ret .= chr(0) . chr(1);
    } else {
        $ret .= $retd;
    }
    if ($BitCount == 24) {
        $Dopl = '';
        // cid added
        for ($z = 0; $z < $Zbytek; $z++) {
            $Dopl .= chr(0);
        }
        for ($y = $Height - 1; $y >= 0; $y--) {
            for ($x = 0; $x < $Width; $x++) {
                $color = imagecolorsforindex($img, ImageColorAt($img, $x, $y));
                $ret .= chr($color["blue"]) . chr($color["green"]) . chr($color["red"]);
            }
            $ret .= $Dopl;
        }
    }
    if ($file != "") {
        $r = $f = fopen($file, "w");
        $r = $r and fwrite($f, $ret);
        $r = $r and fclose($f);
        return $r;
    } else {
        echo $ret;
    }
}
Example #3
0
function ImageIco($Images, $filename = "")
{
    if (is_array($Images)) {
        $ImageCount = count($Images);
        $Image = $Images;
    } else {
        $Image[0] = $Images;
        $ImageCount = 1;
    }
    $WriteToFile = false;
    if ($filename != "") {
        $WriteToFile = true;
    }
    $ret = "";
    $ret .= inttoword(0);
    //PASSWORD
    $ret .= inttoword(1);
    //SOURCE
    $ret .= inttoword($ImageCount);
    //ICONCOUNT
    for ($q = 0; $q < $ImageCount; $q++) {
        $img = $Image[$q];
        $Width = imagesx($img);
        $Height = imagesy($img);
        $ColorCount = imagecolorstotal($img);
        $Transparent = imagecolortransparent($img);
        $IsTransparent = $Transparent != -1;
        if ($IsTransparent) {
            $ColorCount--;
        }
        if ($ColorCount == 0) {
            $ColorCount = 0;
            $BitCount = 24;
        }
        if ($ColorCount > 0 and $ColorCount <= 2) {
            $ColorCount = 2;
            $BitCount = 1;
        }
        if ($ColorCount > 2 and $ColorCount <= 16) {
            $ColorCount = 16;
            $BitCount = 4;
        }
        if ($ColorCount > 16 and $ColorCount <= 256) {
            $ColorCount = 0;
            $BitCount = 8;
        }
        //ICONINFO:
        $ret .= inttobyte($Width);
        //
        $ret .= inttobyte($Height);
        //
        $ret .= inttobyte($ColorCount);
        //
        $ret .= inttobyte(0);
        //RESERVED
        $Planes = 0;
        if ($BitCount >= 8) {
            $Planes = 1;
        }
        $ret .= inttoword($f, $Planes);
        //PLANES
        if ($BitCount >= 8) {
            $WBitCount = $BitCount;
        }
        if ($BitCount == 4) {
            $WBitCount = 0;
        }
        if ($BitCount == 1) {
            $WBitCount = 0;
        }
        $ret .= inttoword($WBitCount);
        //BITS
        $Zbytek = (4 - $Width / (8 / $BitCount) % 4) % 4;
        $ZbytekMask = (4 - $Width / 8 % 4) % 4;
        $PalSize = 0;
        $Size = 40 + ($Width / (8 / $BitCount) + $Zbytek) * $Height + ($Width / 8 + $ZbytekMask) * $Height;
        if ($BitCount < 24) {
            $Size += pow(2, $BitCount) * 4;
        }
        $IconId = 1;
        $ret .= inttodword($Size);
        //SIZE
        $OffSet = 6 + 16 * $ImageCount + $FullSize;
        $ret .= inttodword(6 + 16 * $ImageCount + $FullSize);
        //OFFSET
        $FullSize += $Size;
        //-------------
    }
    for ($q = 0; $q < $ImageCount; $q++) {
        $img = $Image[$q];
        $Width = imagesx($img);
        $Height = imagesy($img);
        $ColorCount = imagecolorstotal($img);
        $Transparent = imagecolortransparent($img);
        $IsTransparent = $Transparent != -1;
        if ($IsTransparent) {
            $ColorCount--;
        }
        if ($ColorCount == 0) {
            $ColorCount = 0;
            $BitCount = 24;
        }
        if ($ColorCount > 0 and $ColorCount <= 2) {
            $ColorCount = 2;
            $BitCount = 1;
        }
        if ($ColorCount > 2 and $ColorCount <= 16) {
            $ColorCount = 16;
            $BitCount = 4;
        }
        if ($ColorCount > 16 and $ColorCount <= 256) {
            $ColorCount = 0;
            $BitCount = 8;
        }
        //ICONS
        $ret .= inttodword(40);
        //HEADSIZE
        $ret .= inttodword($Width);
        //
        $ret .= inttodword(2 * $Height);
        //
        $ret .= inttoword(1);
        //PLANES
        $ret .= inttoword($BitCount);
        //
        $ret .= inttodword(0);
        //Compress method
        $ZbytekMask = $Width / 8 % 4;
        $Zbytek = $Width / (8 / $BitCount) % 4;
        $Size = ($Width / (8 / $BitCount) + $Zbytek) * $Height + ($Width / 8 + $ZbytekMask) * $Height;
        $ret .= inttodword($Size);
        //SIZE
        $ret .= inttodword(0);
        //HPIXEL_M
        $ret .= inttodword(0);
        //V_PIXEL_M
        $ret .= inttodword($ColorCount);
        //UCOLORS
        $ret .= inttodword(0);
        //DCOLORS
        //---------------
        $CC = $ColorCount;
        if ($CC == 0) {
            $CC = 256;
        }
        if ($BitCount < 24) {
            $ColorTotal = imagecolorstotal($img);
            if ($IsTransparent) {
                $ColorTotal--;
            }
            for ($p = 0; $p < $ColorTotal; $p++) {
                $color = imagecolorsforindex($img, $p);
                $ret .= inttobyte($color["blue"]);
                $ret .= inttobyte($color["green"]);
                $ret .= inttobyte($color["red"]);
                $ret .= inttobyte(0);
                //RESERVED
            }
            $CT = $ColorTotal;
            for ($p = $ColorTotal; $p < $CC; $p++) {
                $ret .= inttobyte(0);
                $ret .= inttobyte(0);
                $ret .= inttobyte(0);
                $ret .= inttobyte(0);
                //RESERVED
            }
        }
        if ($BitCount <= 8) {
            for ($y = $Height - 1; $y >= 0; $y--) {
                $bWrite = "";
                for ($x = 0; $x < $Width; $x++) {
                    $color = imagecolorat($img, $x, $y);
                    if ($color == $Transparent) {
                        $color = imagecolorexact($img, 0, 0, 0);
                    }
                    if ($color == -1) {
                        $color = 0;
                    }
                    if ($color > pow(2, $BitCount) - 1) {
                        $color = 0;
                    }
                    $bWrite .= decbinx($color, $BitCount);
                    if (strlen($bWrite) == 8) {
                        $ret .= inttobyte(bindec($bWrite));
                        $bWrite = "";
                    }
                }
                if (strlen($bWrite) < 8 and strlen($bWrite) != 0) {
                    $sl = strlen($bWrite);
                    for ($t = 0; $t < 8 - $sl; $t++) {
                        $sl .= "0";
                    }
                    $ret .= inttobyte(bindec($bWrite));
                }
                for ($z = 0; $z < $Zbytek; $z++) {
                    $ret .= inttobyte(0);
                }
            }
        }
        if ($BitCount >= 24) {
            for ($y = $Height - 1; $y >= 0; $y--) {
                for ($x = 0; $x < $Width; $x++) {
                    $color = imagecolorsforindex($img, imagecolorat($img, $x, $y));
                    $ret .= inttobyte($color["blue"]);
                    $ret .= inttobyte($color["green"]);
                    $ret .= inttobyte($color["red"]);
                    if ($BitCount == 32) {
                        $ret .= inttobyte(0);
                    }
                    //Alpha for XP_COLORS
                }
                for ($z = 0; $z < $Zbytek; $z++) {
                    $ret .= inttobyte(0);
                }
            }
        }
        //MASK
        for ($y = $Height - 1; $y >= 0; $y--) {
            $byteCount = 0;
            $bOut = "";
            for ($x = 0; $x < $Width; $x++) {
                if ($Transparent != -1 and imagecolorat($img, $x, $y) == $Transparent) {
                    $bOut .= "1";
                } else {
                    $bOut .= "0";
                }
            }
            for ($p = 0; $p < strlen($bOut); $p += 8) {
                $byte = bindec(substr($bOut, $p, 8));
                $byteCount++;
                $ret .= inttobyte($byte);
                // echo dechex($byte)." ";
            }
            $Zbytek = $byteCount % 4;
            for ($z = 0; $z < $Zbytek; $z++) {
                $ret .= inttobyte(0xff);
                // echo "FF ";
            }
        }
        //------------------
    }
    //q
    if ($WriteToFile) {
        $f = fopen($filename, "w");
        fwrite($f, $ret);
        fclose($f);
    } else {
        echo $ret;
    }
}