PHP处理bmp格式图片的方法分析
本文分析了PHP处理bmp格式图片的方法。分享给大家供大家参考,具体如下:
白天QA提出项目上传图片有问题,具体为:上传成功,预览失败。我去了之后,又上传了几张其他的图片可以上传,然后仔细问了下他上传的是哪张图片,看了后使用getimagesize函数打印了下。
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也行,下面贴出代码。
=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相关内容感兴趣的读者可查看本站专题:《PHP图形与图片操作技巧汇总》、《PHP网络编程技巧总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。