千家信息网

PHP怎么处理bmp格式的图片

发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,这篇"PHP怎么处理bmp格式的图片"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"P
千家信息网最后更新 2024年11月20日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']<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格式的图片"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

格式 处理 内容 图片 函数 文件 文章 方法 知识 篇文章 也就是 代码 价值 印象 大部分 就是 帖子 数组 更多 步骤 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 免费服务器会怎么样 清空Oracle数据库结构 计算机网络技术专作文 服务器改猫扇 比较好的互联网科技园 黑客攻击服务器后可以删除记录吗 中国进口汽车数据库 学网络技术的前途是什么 数据库被锁死其他进程还能访问吗 如何在服务器上挂问道手游 辽宁省纪录小康工程数据库大西院 steam方舟官方服务器会闪退 网络安全级别设置太 数据库原理与应用内连接例题 内存表更新数据库 logstash服务器管理 配置与管理DNS服务器笔记 网络安全帽和领导帽的区别 上洚软件开发测试工程师 搜索数据库无结果怎么修改 服务器外接硬盘 强化消防网络安全管理 比较好的互联网科技园 为什么说网络安全就是国家安全 数据库被锁死其他进程还能访问吗 数据库集群系统搭建 网络安全建设需求分析 滁州二小举行网络安全教育新闻 数据库 游标的编写内容 网络安全教育活动通讯
0