php 批量產生縮圖代碼

來源:互聯網
上載者:User

php 批量產生縮圖代碼

//建立目錄(目錄, [模式])
function mkdirs($l1, $l2 = 0777){
if(!is_dir($l1)){
  //如果目錄不存在,遞迴建立
  mkdirs(dirname($l1), $l2); 
  return @mkdir($l1, $l2);
}
return true;
}
//儲存檔案(檔案, [內容])
function savefile($l1, $l2=''){ 
if(function_exists(file_put_contents)){
  file_put_contents($l1, $l2);
} else{
  $fp = @fopen($l1, 'wb');
  @fwrite($fp, $l2);
  fclose($fp);
}
}
//擷取檔案尾碼(檔案)
function getfix($l1){
return end(explode('.', $l1));
}
//是否為允許類型(當前, 允許)
function checkfix($l1, $l2){
if(!is_array($l2)){
  $l2 = explode(',', str_replace(' ', '', $l2));
}
return in_array($l1, $l2) ? 1 : 0;
}
class image{
//源地址
var $src; 
//新圖路徑(本地化後)
var $newsrc;
 
//允許的圖類型
var $allowtype = array('.jpg','.gif','.png','.jpeg'); 
//是否縮減GIF, 為0不處理
var $regif   = 0;
//是否保留源檔案(1為保留, 0為MD5)
var $keep = 0;
//是否可以覆蓋已存在的圖片,為0則不可覆蓋
var $over = 0;
  
//圖片來源目錄
var $dir;
//處理後的目錄
var $newdir;

function __construct($l1=null, $l2=null){
  $this->dir   = $l1 ? $l1 : "./images/temp";
  $this->newdir = $l2 ? $l2 : "./images/s";
}

function image($l1=null, $l2=null){
  $this->__construct($l1, $l2);
}

/**
  * 處理後的檔案路徑
  * 將源圖片,MD5檔案名稱後儲存到新的目錄裡
  *
  * @ param  rename()
  * @ return 處理後的檔案名稱
  */
function reName($src){
  //MD5後檔案名稱(例如:3293okoe.gif)
  $l1 = substr(md5($src),10,10).strrchr($src,".");
  //處理後檔案名稱
  $l1  = $this->w.'_'.$this->h.'_'.$l1;
  //返回處理後的地址
  return $this->newdir.'/'.$l1;
}

 
/**
  * 產生縮圖
  *
  * @ param  Mini(圖片地址, 寬度, 高度, 品質)
  *   如果要保留原來的檔案名稱,請設定 $o->keep = 1;
  * @ return 處理後的圖片地址
  */
function Mini($src,$w,$h, $q=80){
  $this->src = $src;
  $this->w = $w;
  $this->h = $h;
 
  //是否處理GIF圖
  if(strrchr($src, ".") == ".gif" && $this->regif == 0){
   return $this->src;
  }
 
  //是否保留原檔案名稱,預設不保留
  if(!$this->keep){
   //改名後的檔案地址
   $newsrc = $this->reName($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); 
  $ow = $arr[0];
  $oh = $arr[1];
  $ot = $arr[2]; 
  switch($ot){
   case 1:
    $im = imagecreatefromgif($src);
    break;
   case 2:
    $im = imagecreatefromjpeg($src);
    break;
   case 3:
    $im = imagecreatefrompng($src);
    break;
   default:
    return 0;
  }
  //處理縮圖
  $nim = imagecreatetruecolor($w,$h);
  $k1 = round($h/$w,2);
  $k2 = round($oh/$ow,2);
  if ($k1<$k2){
   $oow = $ow;
   $ooh = round($ow*$k1);
   $sw = 0;
   $sh = ($oh-$ooh)/2;
  }
  else {
   $oow = $oh/$k1;
   $ooh = $oh;
   $sw = ($ow-$oow)/2;
   $sh = 0;
  }
  //產生圖片
  if(function_exists(imagecopyresampled)){
   imagecopyresampled($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);  
  }
  else {
   imagecopyresized($nim,$im,0,0,$sw,$sh,$w,$h,$oow,$ooh);
  }
  //處理後的目錄是否存在
  if(!is_dir($this->newdir)){
   @mkdir($this->newdir);
  }
  //儲存圖片   
  switch($ot){
   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;   
}
  
/**
  * 儲存網狀圖片
  *
  * @ param  getImg(源圖)
  * @ return 儲存後的本地址址(本地目錄的MD5檔案名稱)
  */
function getimg($l1){
  $l2 = $this->dir.'/'.substr(md5($l1),10,10).strrchr($l1,".");
  //檔案存在,直接返回地址
  if(file_exists($l2)){  
   //echo "exits...";
   return $l2;
  }
 
  //開始擷取檔案,並返回新路徑
  $img = file_get_contents($l1);    
  if($img){
   if(!is_dir($this->dir)){
    @mkdir($this->dir);
   }
   savefile($l2, $img);
   //echo "file_get..";
   return $l2;
  }   
}

/**
  * 轉換縮圖(檔案名稱和結構不變)
  *
  * @ param  mini(源地址, 寬度, 高度, 品質 )
  * @ return 產生的地址
  */

function reImg($src, $w, $h, $q=80){
  $this->keep = 1;
  return $this->Mini($src, $w, $h, $q);
}
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.