PHP批量產生圖片縮圖的方法_php技巧

來源:互聯網
上載者:User

本文執行個體講述了PHP批量產生圖片縮圖的方法。分享給大家供大家參考。具體如下:

<?php//用PHP批量產生圖片縮圖 function mkdirs($dirname,$mode=0777) //建立目錄(目錄, [模式]) {  if(!is_dir($dirname))  {   mkdirs($dirname,$mode); //如果目錄不存在,遞迴建立   return mkdir($dirname,$mode);  }  return true; } function savefile($filename,$content='') //儲存檔案(檔案, [內容]) {  if(function_exists(file_put_contents))  {   file_put_contents($filename,$content);  }  else  {   $fp=fopen($filename,"wb");   fwrite($fp,$content);   fclose($fp);  } } function getsuffix($filename) //擷取檔案名稱尾碼 {  return end(explode(".",$filename)); } function checksuffix($filename,$arr) //是否為允許類型(當前, 允許) {  if(!is_array($arr))  {   $arr=explode(",",str_replace(" ","",$arr));  }  return in_array($filename,$arr) ? 1 : 0; } class image {  var $src; //源地址  var $newsrc; //新圖路徑(本地化後)  var $allowtype=array(".gif",".jpg",".png",".jpeg"); //允許的圖片類型  var $regif=0; //是否縮減GIF, 為0不處理  var $keep=0; //是否保留源檔案(1為保留, 0為MD5)  var $over=0; //是否可以覆蓋已存在的圖片,為0則不可覆蓋  var $dir; //圖片來源目錄  var $newdir; //處理後的目錄  function __construct($olddir=null,$newdir=null)  {   $this->dir=$olddir ? $olddir : "./images/temp";   $this->newdir=$newdir ? $newdir : "./images/s";  }  function reNames($src)  {   $md5file=substr(md5($src),10,10).strrchr($src,".");   //MD5檔案名稱後(例如:3293okoe.gif)   $md5file=$this->w."_".$this->h."_".$md5file;   //處理後檔案名稱   return $this->newdir."/".$md5file;   //將源圖片,MD5檔案名稱後儲存到新的目錄裡  }  function Mini($src,$w,$h,$q=80)  //產生縮圖 Mini(圖片地址, 寬度, 高度, 品質)  {   $this->src=$src;   $this->w=$w;   $this->h=$h;   if(strrchr($src,".")==".gif" && $this->regif==0)   //是否處理GIF圖   {    return $this->src;   }   if($this->keep==0) //是否保留源檔案,預設不保留   {    $newsrc=$this->reNames($src); //改名後的檔案地址   }   else     //保持原名   {    $src=str_replace("\\","/",$src);    $newsrc=$this->newdir.strrchr($src,"/");   }   if(file_exists($newsrc) && $this->over==0)   //如果已存在,直接返回地址   {    return $newsrc;   }   if(strstr($src,"http://") && !strstr($src,$_SERVER['HTTP_HOST']))   //如果是網路檔案,先儲存   {    $src=$this->getimg($src);   }   $arr=getimagesize($src); //擷取圖片屬性   $width=$arr[0];   $height=$arr[1];   $type=$arr[2];   switch($type)   {    case 1:  //1 = GIF,     $im=imagecreatefromgif($src);     break;    case 2:  //2 = JPG     $im=imagecreatefromjpeg($src);     break;    case 3:  //3 = PNG     $im=imagecreatefrompng($src);     break;    default:     return 0;   }   //處理縮圖   $nim=imagecreatetruecolor($w,$h);   $k1=round($h/$w,2);   $k2=round($height/$width,2);   if($k1<$k2)   {    $width_a=$width;    $height_a=round($width*$k1);    $sw=0;    $sh=($height-$height_a)/2;   }   else   {     $width_a=$height/$k1;     $height_a=$height;     $sw=($width-$width_a)/2;     $sh = 0;   }   //產生圖片   if(function_exists(imagecopyresampled))   {    imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a);   }   else   {    imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$width_a,$height_a);   }   if(!is_dir($this->newdir))   {    mkdir($this->newdir);   }   switch($type)  //儲存圖片   {    case 1:     $rs=imagegif($nim,$newsrc);     break;    case 2:     $rs=imagejpeg($nim,$newsrc,$q);     break;    case 3:     $rs=imagepng($nim,$newsrc);     break;    default:     return 0;   }   return $newsrc; //返回處理後路徑  }  function getimg($filename)  {   $md5file=$this->dir."/".substr(md5($filename),10,10).strrchr($filename,".");   if(file_exists($md5file))   {    return $md5file;   }   //開始擷取檔案,並返回新路徑   $img=file_get_contents($filename);   if($img)   {    if(!is_dir($this->dir))    {     mkdir($this->dir);    }    savefile($md5file,$img);    return $md5file;   }  }  function reImg($src,$w,$h,$q)  //轉換縮圖(檔案名稱和結構不變)  {   $this->keep=1;   return $this->Mini($src,$w,$h,$q);   //return 產生的地址  } } $image=new image(); echo $image->reImg("images/zht.jpg",75,75,80); echo "<br/>"; echo $image->reImg("images/m8920.jpg",75,75,80); echo "<br/>"; echo $image->getimg("./images/s/zht.jpg");?>

希望本文所述對大家的php程式設計有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.