• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP imagecreatefrombmp 从BMP文件或URL新建一图像_php技巧

php 搞代码 3年前 (2022-01-26) 28次浏览 已收录 0个评论

大家都知道php GD库可方便的从URL新建一图像, GD中有imagecreatefromjpeg(),imagecreatefromPNG()….等之类的FUNCTION 可有时从URL中读取的切BMP图像而 可恨的是 GD2中切偏偏没有imageCreateFromBMP() 虽然有imagecreatefromWBMP() 但还是相差还是很远!
用下面FUNCTION可以方便解决

 <BR>function imagecreatefrombmp($file) <BR>{ <BR>global $CurrentBit, $echoMode; <BR>$f=fopen($file,"r"); <BR>$Header=fread($f,2); <BR>if($Header=="BM") <BR>{ <BR>$Size=freaddword($f); <BR>$Reserved1=freadword($f); <BR>$Reserved2=freadword($f); <BR>$FirstByteOfImage=freaddword($f); <BR>$SizeBITMAPINFOHEADER=freaddword($f); <BR>$Width=freaddword($f); <BR>$Height=freaddword($f); <BR>$biPlanes=freadword($f); <BR>$biBitCount=freadword($f); <BR>$RLECompression=freaddword($f); <BR>$WidthxHeight=freaddword($f); <BR>$biXPelsPerMeter=freaddword($f); <BR>$biYPelsPerMeter=freaddword($f); <BR>$NumberOfPalettesUsed=freaddword($f); <BR>$NumberOfImportantColors=freaddword($f); <BR>if($biBitCount<24) <BR>{ <BR>$img=imagecreate($Width,$Height); <BR>$Colors=pow(2,$biBitCount); <BR>for($p=0;$p<$Colors;$p++) <BR>{ <BR>$B=freadbyte($f); <BR>$G=freadbyte($f); <BR>$R=freadbyte($f); <BR>$Reserved=freadbyte($f); <BR>$Palette[]=imagecolorallocate($img,$R,$G,$B); <BR>} <BR>if($RLECompression==0) <BR>{ <BR>$Zbytek=(4-ceil(($Width/(8/$biBitCount)))%4)%4; <BR>for($y=$Height-1;$y>=0;$y--) <BR>{ <BR>$CurrentBit=0; <BR>for($x=0;$x<$Width;$x++) <BR>{ <BR>$C=freadbits($f,$biBitCount); <BR>imagesetpixel($img,$x,$y,$Palette[$C]); <BR>} <BR>if($CurrentBit!=0) {freadbyte($f);} <BR>for($g=0;$g<$Zbytek;$g++) <BR>freadbyte($f); <BR>} <BR>} <BR>} <BR>if($RLECompression==1) //$BI_RLE8 <BR>{ <BR>$y=$Height; <BR>$pocetb=0; <BR>while(true) <BR>{ <BR>$y--; <BR>$prefix=freadbyte($f); <BR>$suffix=freadbyte($f); <BR>$pocetb+=2; <BR>$echoit=false; <BR>if($echoit)echo "Prefix: $prefix Suffix: $suffix<BR>"; <BR>if(($prefix==0)and($suffix==1)) break; <BR>if(feof($f)) break; <BR>while(!(($prefix==0)and($suffix==0))) <BR>{ <BR>if($prefix==0) <BR>{ <BR>$pocet=$suffix; <BR>$Data.=fread($f,$pocet); <BR>$pocetb+=$pocet; <BR>if($pocetb%2==1) {freadbyte($f); $pocetb++;} <BR>} <BR>if($prefix>0) <BR>{ <BR>$pocet=$prefix; <BR>for($r=0;$r<$pocet;$r++) <BR>$Data.=chr($suffix); <BR>} <BR>$prefix=freadbyte($f); <BR>$suffix=freadbyte($f); <BR>$pocetb+=2; <BR>if($echoit) echo "Prefix: $prefix Suffix: $suffix<BR>"; <BR>} <BR>for($x=0;$x<strlen($Data);$x++) <BR>{ <BR>imagesetpixel($img,$x,$y,$Palette[ord($Data[$x])]); <BR>} <BR>$Data=""; <BR>} <BR>} <BR>if($RLECompression==2) //$BI_RLE4 <BR>{ <BR>$y=$Height; <BR>$pocetb=0; <BR>/*while(!feof($f)) <BR>echo freadbyte($f)."_".freadbyte($f)."<BR>";*/ <BR>while(true) <BR>{ <BR>//break; <BR>$y--; <BR>$prefix=<i style="color:transparent">本¥文来源gaodai$ma#com搞$代*码*网(</i><strong>搞代gaodaima码</strong>freadbyte($f); <BR>$suffix=freadbyte($f); <BR>$pocetb+=2; <BR>$echoit=false; <BR>if($echoit)echo "Prefix: $prefix Suffix: $suffix<BR>"; <BR>if(($prefix==0)and($suffix==1)) break; <BR>if(feof($f)) break; <BR>while(!(($prefix==0)and($suffix==0))) <BR>{ <BR>if($prefix==0) <BR>{ <BR>$pocet=$suffix; <BR>$CurrentBit=0; <BR>for($h=0;$h<$pocet;$h++) <BR>$Data.=chr(freadbits($f,4)); <BR>if($CurrentBit!=0) freadbits($f,4); <BR>$pocetb+=ceil(($pocet/2)); <BR>if($pocetb%2==1) {freadbyte($f); $pocetb++;} <BR>} <BR>if($prefix>0) <BR>{ <BR>$pocet=$prefix; <BR>$i=0; <BR>for($r=0;$r<$pocet;$r++) <BR>{ <BR>if($i%2==0) <BR>{ <BR>$Data.=chr($suffix%16); <BR>} <BR>else <BR>{ <BR>$Data.=chr(floor($suffix/16)); <BR>} <BR>$i++; <BR>} <BR>} <BR>$prefix=freadbyte($f); <BR>$suffix=freadbyte($f); <BR>$pocetb+=2; <BR>if($echoit) echo "Prefix: $prefix Suffix: $suffix<BR>"; <BR>} <BR>for($x=0;$x<strlen($Data);$x++) <BR>{ <BR>imagesetpixel($img,$x,$y,$Palette[ord($Data[$x])]); <BR>} <BR>$Data=""; <BR>} <BR>} <BR>if($biBitCount==24) <BR>{ <BR>$img=imagecreatetruecolor($Width,$Height); <BR>$Zbytek=$Width%4; <BR>for($y=$Height-1;$y>=0;$y--) <BR>{ <BR>for($x=0;$x<$Width;$x++) <BR>{ <BR>$B=freadbyte($f); <BR>$G=freadbyte($f); <BR>$R=freadbyte($f); <BR>$color=imagecolorexact($img,$R,$G,$B); <BR>if($color==-1) $color=imagecolorallocate($img,$R,$G,$B); <BR>imagesetpixel($img,$x,$y,$color); <BR>} <BR>for($z=0;$z<$Zbytek;$z++) <BR>freadbyte($f); <BR>} <BR>} <BR>return $img; <BR>} <BR>fclose($f); <BR>} <BR>function freadbyte($f) <BR>{ <BR>return ord(fread($f,1)); <BR>} <BR>function freadword($f) <BR>{ <BR>$b1=freadbyte($f); <BR>$b2=freadbyte($f); <BR>return $b2*256+$b1; <BR>} <BR>function freaddword($f) <BR>{ <BR>$b1=freadword($f); <BR>$b2=freadword($f); <BR>return $b2*65536+$b1; <BR>} <BR>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP imagecreatefrombmp 从BMP文件或URL新建一图像_php技巧
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址