php将bmp格式图片转换成jpg格式程序
发布时间:2022-07-28 10:20:41 所属栏目:PHP教程 来源:互联网
导读: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(
|
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; // 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 }; }; 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; }; }; /* *------------------------------------------------------------ * imagecreatefrombmp *------------------------------------------------------------ * - reads image from a bmp file * * parameters: $file - target file to load * * returns: image id */ function imagecreatefrombmp($file) { global $currentbit, $echomode; $f=fopen($file,"r"); $header=fread($f,2); if($header=="bm") { $size=freaddword($f); $reserved1=freadword($f); $reserved2=freadword($f); $firstbyteofimage=freaddword($f); $sizebitmapinfoheader=freaddword($f); $width=freaddword($f); $height=freaddword($f); $biplanes=freadword($f); $bibitcount=freadword($f); $rlecompression=freaddword($f); $widthxheight=freaddword($f); $bixpelspermeter=freaddword($f); $biypelspermeter=freaddword($f); $numberofpalettesused=freaddword($f); $numberofimportantcolors=freaddword($f); if($bibitcount<24) { $img=imagecreate($width,$height); $colors=pow(2,$bibitcount); for($p=0;$p<$colors;$p++) { $b=freadbyte($f); $g=freadbyte($f); $r=freadbyte($f); $reserved=freadbyte($f); $palette[]=imagecolorallocate($img,$r,$g,$b); }; if($rlecompression==0) { $zbytek=(4-ceil(($width/(8/$bibitcount)))%4)%4; for($y=$height-1;$y>=0;$y--) { $currentbit=0; for($x=0;$x<$width;$x++) { $c=freadbits($f,$bibitcount); imagesetpixel($img,$x,$y,$palette[$c]); }; if($currentbit!=0) {freadbyte($f);}; for($g=0;$g<$zbytek;$g++) freadbyte($f); }; }; }; if($rlecompression==1) //$bi_rle8 { $y=$height; $pocetb=0; while(true) { $y--; $prefix=freadbyte($f); $suffix=freadbyte($f); $pocetb+=2; $echoit=false; if($echoit)echo "prefix: $prefix suffix: $suffix<br>"; if(($prefix==0)and($suffix==1)) break; if(feof($f)) break; while(!(($prefix==0)and($suffix==0))) { if($prefix==0) { $pocet=$suffix; $data.=fread($f,$pocet); $pocetb+=$pocet; if($pocetb%2==1) {freadbyte($f); $pocetb++;}; }; if($prefix>0) { $pocet=$prefix; for($r=0;$r<$pocet;$r++) $data.=chr($suffix); }; $prefix=freadbyte($f); $suffix=freadbyte($f); $pocetb+=2; if($echoit) echo "prefix: $prefix suffix: $suffix<br>"; }; for($x=0;$x<strlen($data);$x++) { imagesetpixel($img,$x,$y,$palette[ord($data[$x])]); }; $data=""; }; }; (编辑:珠海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


