PHP imagecreatefrombmp 从BMP文件或URL新建一图像_php教程-查字典教程网
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
发布时间:2016-12-29 来源:查字典编辑
摘要:大家都知道phpGD库可方便的从URL新建一图像,GD中有imagecreatefromjpeg(),imagecreatefromPNG(...

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

用下面FUNCTION可以方便解决

复制代码 代码如下:

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="";

}

}

if($RLECompression==2) //$BI_RLE4

{

$y=$Height;

$pocetb=0;

/*while(!feof($f))

echo freadbyte($f)."_".freadbyte($f)."<BR>";*/

while(true)

{

//break;

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

$CurrentBit=0;

for($h=0;$h<$pocet;$h++)

$Data.=chr(freadbits($f,4));

if($CurrentBit!=0) freadbits($f,4);

$pocetb+=ceil(($pocet/2));

if($pocetb%2==1) {freadbyte($f); $pocetb++;}

}

if($prefix>0)

{

$pocet=$prefix;

$i=0;

for($r=0;$r<$pocet;$r++)

{

if($i%2==0)

{

$Data.=chr($suffix%16);

}

else

{

$Data.=chr(floor($suffix/16));

}

$i++;

}

}

$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="";

}

}

if($biBitCount==24)

{

$img=imagecreatetruecolor($Width,$Height);

$Zbytek=$Width%4;

for($y=$Height-1;$y>=0;$y--)

{

for($x=0;$x<$Width;$x++)

{

$B=freadbyte($f);

$G=freadbyte($f);

$R=freadbyte($f);

$color=imagecolorexact($img,$R,$G,$B);

if($color==-1) $color=imagecolorallocate($img,$R,$G,$B);

imagesetpixel($img,$x,$y,$color);

}

for($z=0;$z<$Zbytek;$z++)

freadbyte($f);

}

}

return $img;

}

fclose($f);

}

function freadbyte($f)

{

return ord(fread($f,1));

}

function freadword($f)

{

$b1=freadbyte($f);

$b2=freadbyte($f);

return $b2*256+$b1;

}

function freaddword($f)

{

$b1=freadword($f);

$b2=freadword($f);

return $b2*65536+$b1;

}

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新php教程学习
    热门php教程学习
    编程开发子分类