PHP imagecreatefrombmp Create a new image from a BMP file or URL_PHP tutorial

WBOY
Release: 2016-07-21 15:17:55
Original
899 people have browsed it

Everyone knows that the php GD library can easily create a new image from a URL. GD has imagecreatefromjpeg(), imagecreatefromPNG()... and other functions that can sometimes read BMP images from the URL. The most annoying thing is GD2 There is no imageCreateFromBMP() in Zhongqie. Although there is imagecreatefromWBMP(), it is still far behind!
Using the following FUNCTION can be easily solved

Copy the code The code is as follows:

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
";
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{
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)."
";*/
while(true)
{
//break;
$y--;
$prefix=freadbyte($f );
$suffix=freadbyte($f);
$pocetb+=2;
$echoit=false;
if($echoit)echo "Prefix: $prefix Suffix: $suffixif(($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
";
}
for($x= 0;$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;
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/325636.htmlTechArticleEveryone knows that the php GD library can easily create an image from a URL. GD includes imagecreatefromjpeg(), imagecreatefromPNG( )....etc. FUNCTION can sometimes read from the URL cut BMP images and hateful...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template