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