中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP怎么處理bmp格式的圖片

發布時間:2022-03-14 16:43:15 來源:億速云 閱讀:140 作者:iii 欄目:web開發

這篇“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格式的圖片”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

商洛市| 蕲春县| 闵行区| 繁峙县| 磐安县| 张家港市| 凤台县| 固阳县| 巴里| 繁峙县| 寻甸| 浏阳市| 印江| 长乐市| 丹寨县| 饶河县| 潜江市| 宜宾县| 清涧县| 武强县| 沧州市| 资阳市| 长武县| 沙河市| 武义县| 苍南县| 绍兴县| 繁昌县| 抚宁县| 黎城县| 民勤县| 奉节县| 威海市| 湟中县| 徐闻县| 广昌县| 东海县| 炉霍县| 潢川县| 新竹县| 宁阳县|