您好,登錄后才能下訂單哦!
這篇“PHP怎么處理bmp格式的圖片”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“PHP怎么處理bmp格式的圖片”文章吧。
Array
(
[0]=>494
[1]=>260
[2]=>6
[3]=>width="494"height="260"
[bits]=>24
[mime]=>image/x-ms-bmp
)
仔細看下,上面打印的數組,mime為image/x-ms-bmp,也就是bmp格式的,印象中php的gd庫沒有處理這個函數,后來我便在配置文件中,只要mime為這種的便不能上傳。
晚上回來后,我便在網上查找php處理bmp相關方法,后來終于在stackoverflow中找到了,帖子里說進入官網的有關imagecreate的函數評論,有個ImageCreateFromBMP方法,先把bmp格式的文件給此函數調用,再用imagejpeg保存就行,后來試了下,發現imagepng也行,下面貼出代碼。
<?php
functionImageCreateFromBMP($filename){
//Ouverturedufichierenmodebinaire
if(!$f1=fopen($filename,"rb"))
returnFALSE;
//1:Chargementdesent?tesFICHIER
$FILE=unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset",fread($f1,14));
if($FILE['file_type']!=19778)
returnFALSE;
//2:Chargementdesent?tesBMP
$BMP=unpack('Vheader_size/Vwidth/Vheight/vplanes/vbits_per_pixel'.
'/Vcompression/Vsize_bitmap/Vhoriz_resolution'.
'/Vvert_resolution/Vcolors_used/Vcolors_important',fread($f1,40));
$BMP['colors']=pow(2,$BMP['bits_per_pixel']);
if($BMP['size_bitmap']==0)
$BMP['size_bitmap']=$FILE['file_size']-$FILE['bitmap_offset'];
$BMP['bytes_per_pixel']=$BMP['bits_per_pixel']/8;
$BMP['bytes_per_pixel2']=ceil($BMP['bytes_per_pixel']);
$BMP['decal']=($BMP['width']*$BMP['bytes_per_pixel']/4);
$BMP['decal']-=floor($BMP['width']*$BMP['bytes_per_pixel']/4);
$BMP['decal']=4-(4*$BMP['decal']);
if($BMP['decal']==4)
$BMP['decal']=0;
//3:Chargementdescouleursdelapalette
$PALETTE=array();
if($BMP['colors']<16777216){
$PALETTE=unpack('V'.$BMP['colors'],fread($f1,$BMP['colors']*4));
}
//4:Cr?ationdel'image
$IMG=fread($f1,$BMP['size_bitmap']);
$VIDE=chr(0);
$res=imagecreatetruecolor($BMP['width'],$BMP['height']);
$P=0;
$Y=$BMP['height']-1;
while($Y>=0){
$X=0;
while($X<$BMP['width']){
if($BMP['bits_per_pixel']==24)
$COLOR=unpack("V",substr($IMG,$P,3).$VIDE);
elseif($BMP['bits_per_pixel']==16){
$COLOR=unpack("n",substr($IMG,$P,2));
$COLOR[1]=$PALETTE[$COLOR[1]+1];
}elseif($BMP['bits_per_pixel']==8){
$COLOR=unpack("n",$VIDE.substr($IMG,$P,1));
$COLOR[1]=$PALETTE[$COLOR[1]+1];
}elseif($BMP['bits_per_pixel']==4){
$COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1));
if(($P*2)%2==0)
$COLOR[1]=($COLOR[1]>>4);
else
$COLOR[1]=($COLOR[1]&0x0F);
$COLOR[1]=$PALETTE[$COLOR[1]+1];
}
elseif($BMP['bits_per_pixel']==1){
$COLOR=unpack("n",$VIDE.substr($IMG,floor($P),1));
if(($P*8)%8==0)
$COLOR[1]=$COLOR[1]>>7;
elseif(($P*8)%8==1)
$COLOR[1]=($COLOR[1]&0x40)>>6;
elseif(($P*8)%8==2)
$COLOR[1]=($COLOR[1]&0x20)>>5;
elseif(($P*8)%8==3)
$COLOR[1]=($COLOR[1]&0x10)>>4;
elseif(($P*8)%8==4)
$COLOR[1]=($COLOR[1]&0x8)>>3;
elseif(($P*8)%8==5)
$COLOR[1]=($COLOR[1]&0x4)>>2;
elseif(($P*8)%8==6)
$COLOR[1]=($COLOR[1]&0x2)>>1;
elseif(($P*8)%8==7)
$COLOR[1]=($COLOR[1]&0x1);
$COLOR[1]=$PALETTE[$COLOR[1]+1];
}else
returnFALSE;
imagesetpixel($res,$X,$Y,$COLOR[1]);
$X++;
$P+=$BMP['bytes_per_pixel'];
}
$Y--;
$P+=$BMP['decal'];
}
//Fermeturedufichier
fclose($f1);
return$res;
}
$pic='2.bmp';
$res=ImageCreateFromBMP($pic);
imagepng($res,'1.png');
imagejpeg($res,'1.jpeg');
以上就是關于“PHP怎么處理bmp格式的圖片”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。