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; }; };
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; } }
function imagebmp(&$img, $filename = '') { $widthOrig = imagesx($img); $widthFloor = floor($widthOrig / 16) * 16; $widthCeil = ceil($widthOrig / 16) * 16; $height = imagesy($img); $size = $widthCeil * $height * 3 + 54; // Bitmap File Header $result = 'BM'; // header (2b) $result .= int_to_dword($size); // size of file (4b) $result .= int_to_dword(0); // reserved (4b) $result .= int_to_dword(54); // byte location in the file which is first byte of IMAGE (4b) // Bitmap Info Header $result .= int_to_dword(40); // Size of BITMAPINFOHEADER (4b) $result .= int_to_dword($widthCeil); // width of bitmap (4b) $result .= int_to_dword($height); // height of bitmap (4b) $result .= int_to_word(1); // biPlanes = 1 (2b) $result .= int_to_word(24); // biBitCount = {1 (mono) or 4 (16 clr ) or 8 (256 clr) or 24 (16 Mil)} (2b $result .= int_to_dword(0); // RLE COMPRESSION (4b) $result .= int_to_dword(0); // width x height (4b) $result .= int_to_dword(0); // biXPelsPerMeter (4b) $result .= int_to_dword(0); // biYPelsPerMeter (4b) $result .= int_to_dword(0); // Number of palettes used (4b) $result .= int_to_dword(0); // Number of important colour (4b) // is faster than chr() $arrChr = array(); for ($i = 0; $i < 256; $i++) { $arrChr[$i] = chr($i); } // creates image data $bgfillcolor = array('red' => 0, 'green' => 0, 'blue' => 0); // bottom to top - left to right - attention blue green red !!! $y = $height - 1; for ($y2 = 0; $y2 < $height; $y2++) { for ($x = 0; $x < $widthFloor;) { $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; $rgb = imagecolorsforindex($img, imagecolorat($img, $x++, $y)); $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; } for ($x = $widthFloor; $x < $widthCeil; $x++) { $rgb = $x < $widthOrig ? imagecolorsforindex($img, imagecolorat($img, $x, $y)) : $bgfillcolor; $result .= $arrChr[$rgb['blue']] . $arrChr[$rgb['green']] . $arrChr[$rgb['red']]; } $y--; } // see imagegif if ($filename == '') { echo $result; } else { $file = fopen($filename, 'wb'); fwrite($file, $result); fclose($file); } }