分享更有价值
被信任是一种快乐

PHP怎么处理bmp格式的图片

文章页正文上

这篇“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也行,下面贴出代码。
  

  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’]

  $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

  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格式的图片”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注云技术行业资讯频道。

相关推荐: vue如何在组件里面注册组件

这篇文章主要介绍“vue如何在组件里面注册组件”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue如何在组件里面注册组件”文章能帮助大家解决问题。 在组件内部注册组件的方式,有两种方法:通过 components 属性…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册