文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP怎么处理bmp格式的图片

2024-04-02 19:55

关注

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯