php圖片上傳類,支援加浮水印,產生略縮圖

來源:互聯網
上載者:User
 代碼如下 複製代碼

<?php
/*----------------------------------------------------------------------------------
 *
 *----------------------------------------------------------------------------------
 */
class image_up{
 //定義基本參數
 private $uptype=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png');  //上傳檔案類型
 private $max_file_size=102400;    //上傳大小限制(單位:KB)
 private $destination_folder="up/"; //上傳檔案路徑
 private $watermark=1;              //是否附加浮水印
 private $watertype=1;              //浮水印類型(1為文字,2為圖片)
 private $waterposition=1;          //浮水印位置(1為左下角,2為右下角,3為左上方,4為右上方,5為置中);
 private $waterstring=null;         //浮水印字串
 private $waterimg=null;            //浮水印圖片
 private $imgpreview=1;             //是否產生預覽圖(1為產生,其他為不產生);
 private $imgpreviewsize=1;         //預覽圖比例,0為按固定寬和高顯示,其他為比例顯示
 private $imgwidth=200;             //預覽圖固定寬度
 private $imgheight=200;            //預覽圖固定高度
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 private $imgthu=1;                     //是否產生且儲存略縮圖,1為產生,0為不產生
 private $imgthu_folder=null;           //略縮圖儲存路徑,預設與檔案路徑一致
 private $imgthu_fixed=0;               //略縮圖是否使用固定寬高,1為使用,0為靈活變動
 private $imgthu_width=200;             //略縮圖寬度
 private $imgthu_height=200;            //略縮圖高度
 
 private $imgthu_name=null;             //略縮圖名稱
 //******************************************************************************************************************
 private $inputname="upfile";       //檔案上傳框名稱
 //******************************************************************************************************************
 private $img_preview_display;      //圖片預覽圖顯示
 //******************************************************************************************************************
 //檔案上傳相關資訊,1為檔案不存在,2為類型不符合,3為超出大小限制,4為上傳失敗,0為上傳成功
 private $file_up_info=null;
 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 //可在外部擷取上傳檔案基本資料
 private $file_name;         //客服端檔案的原名稱
 private $file_type;         //檔案的MIME類型
 private $file_size;         //已上傳檔案的大小,單位/位元組
 private $file_tmp_name;     //儲存的臨時檔案名稱
 private $file_error;        //該檔案上傳相關錯誤碼

 private $img_size;          //取得圖片的長寬
 private $file_basename;     //擷取帶副檔名的全名
 private $file_extension;    //擷取副檔名
 private $filename;          //檔案名稱(不帶副檔名)
 private $destination;       //問價路徑加名稱
 //******************************************************************************************************************
 public function __set($propety_name,$value){
  $this->$propety_name=$value;
 }
 public function __get($property_name){
  if(isset($this->$property_name))
  return($this->$property_name);
  else return(NULL);
 }
 //******************************************************************************************************************
 //定義檔案上傳功能
 public function up(){
  //判斷檔案是否存在
  if(!is_uploaded_file($_FILES[$this->inputname]["tmp_name"])){
   $this->file_up_info=1;
   return;
  }
  //擷取並賦值相應基本參數
  $upfile=$_FILES[$this->inputname];
  $this->file_name=$upfile["name"];
  $this->file_type=$upfile["type"];
  $this->file_size=$upfile["size"];
  $this->file_tmp_name=$upfile["tmp_name"];
  $this->file_error=$upfile["error"];
  //檢查檔案類型是否符合
  if(!in_array($this->file_type,$this->uptype)){
   $this->file_up_info=2;
   return;
  }
  //檢查檔案大小是否超出限制
  if($this->file_size>$this->max_file_size){
   $this->file_up_info=3;
   return;
  }
  //判斷目錄是否存在
  if(!file_exists($this->destination_folder))
  mkdir($this->destination_folder);
  //進一步取得圖片的資訊並賦值
  $this->img_size=getimagesize($this->file_tmp_name);
  $pathinfo=pathinfo($this->file_name);
  $this->file_extension=$pathinfo["extension"];    //擷取副檔名
  $this->file_basename=$pathinfo["basename"];      //擷取帶副檔名的全名
  $this->filename=$pathinfo["filename"];           //檔案名稱(不帶副檔名)
  $filename2=$pathinfo['filename'];
  $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension;
  //判斷檔案名稱是否存在,如果存在則重新命名
  $n=1;
  while (file_exists($this->destination)){
   while (file_exists($this->destination)){
    $n++;
    $this->filename=$this->filename."(".$n.")";
    $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension;
   }
   $this->filename=$filename2."(".$n.")";
   $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension;
  }
  //移動上傳的檔案
  if(move_uploaded_file($this->file_tmp_name,$this->destination))
  $this->file_up_info=0;
  else $this->file_up_info=4;
   
  //添加浮水印
  if($this->watermark==1){
   $this->imgthu();
  }
  //產生略縮圖
  if($this->imgthu==1){
   $this->add_watermark();
  }
  //產生預覽圖
  if($this->imgpreviewsize == 0){
   if($this->img_size["0"]<$this->imgwidth) $this->imgwidth=$this->img_size["0"];
   if($this->img_size["1"]<$this->imgheight) $this->imgheight=$this->img_size["1"];
  }else{
   $this->imgwidth=$this->img_size["0"]*$this->imgpreviewsize;
   $this->imgheight=$this->img_size["1"]*$this->imgpreviewsize;
  }
  $this->img_preview_display="<img src='$this->destination' width='$this->imgwidth' height='$this->imgheight'
                                    alt='圖片預覽:r檔案名稱':$this->file_tmp_name />";
 }
//====================================================================================================================
//==================================================================================================================== 
 //產生略縮圖功能
 function imgthu(){
  if($this->imgthu_folder==null)
    $this->imgthu_folder=$this->destination_folder;
  
  //$this->imgthu_name=$this->filename."_t.".$this->file_extension;
  $imgthu_name_b=$this->filename."_t";
  $imgthu_name_b2=$this->filename."_t";
  $destination_b=$this->imgthu_folder.$imgthu_name_b.".".$this->file_extension;
     //判斷檔案名稱是否存在,如果存在則重新命名
  $n=1;
  while (file_exists($destination_b)){
   while (file_exists($destination_b)){
    $n++;
    $imgthu_name_b=$imgthu_name_b."(".$n.")";
    $destination_b = $this->imgthu_folder.$imgthu_name_b.".".$this->file_extension;
   }
   $imgthu_name_b=$imgthu_name_b2."(".$n.")";
   $destination_b = $this->imgthu_folder.$imgthu_name_b.".".$this->file_extension;
  }
  
  
  $imginfo=getimagesize($this->destination);
  switch($imginfo[2])
  {
   case 1:
    $in=@imagecreatefromgif($this->destination);
    break;
   case 2:
    $in=@imagecreatefromjpeg($this->destination);
    break;
   case 3:
    $in=@imagecreatefrompng($this->destination);
    break;
   case 6:
    $in =@imagecreatefrombmp($this->destination);
    break;
   default:
    break;
  }
  //計算略縮圖長寬
  if($this->imgthu_fixed==0){
   if($this->imgthu_height>($imginfo[1]/$imginfo[0])*$this->imgthu_width)
    $this->imgthu_width = ($imginfo[0]/$imginfo[1])*$this->imgthu_height;
   else
    $this->imgthu_height=($imginfo[1]/$imginfo[0])*$this->imgthu_width;
  }
  $new = imageCreateTrueColor($this->imgthu_width,$this->imgthu_height);
  ImageCopyResized($new,$in,0,0,0,0,$this->imgthu_width,$this->imgthu_height,$imginfo[0],$imginfo[1]);
  switch ($imginfo[2])
  {
   case 1:
    imagejpeg($new,$destination_b);
    break;
   case 2:
    imagejpeg($new,$destination_b);
    break;
   case 3:
    imagepng($new,$destination_b);
    break;
   case 6:
    imagewbmp($new,$destination_b);
    break;
  }
 }
//====================================================================================================================
//==================================================================================================================== 
 //添加浮水印功能
 function add_watermark(){
  //1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),
  //8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。
  $imginfo=getimagesize($this->destination);
  $im=imagecreatetruecolor($this->img_size[0],$this->img_size[1]);       //建立真彩色
  $white=imagecolorallocate($im,255,255,255);                            //設定顏色
  $black=imagecolorallocate($im,0,0,0);
  $red=imagecolorallocate($im,255,0,0);
  //在 image 映像的座標 x,y(映像左上方為 0, 0)處用 color 顏色執列區域填充(即與 x, y 點顏色相同且相鄰的點都會被填充)。
  imagefill($im,0,0,$white);

  switch($imginfo[2])
  {
   case 1:
    $simage =imagecreatefromgif($this->destination);      // 建立一個新的形象,從檔案或 URL
    break;
   case 2:
    $simage =imagecreatefromjpeg($this->destination);
    break;
   case 3:
    $simage =imagecreatefrompng($this->destination);
    break;
   case 6:
    $simage =imagecreatefromwbmp($this->destination);
    break;
   default:
    echo ("不支援的檔案類型");
    break;
  }
  if(!empty($simage))
  {
   //位置設定
   if($this->watertype==1){
    $str_len=strlen($this->waterstring);
       $str_width=$str_len*10;
       $str_height=20;
   }elseif($this->watertype==1 && file_exists($this->waterimg)){
    $iinfo=getimagesize($this->waterimg);
    $str_width = $iinfo[0];
    $str_height = $iinfo[1];
   }
   
   switch ($this->waterposition){
    case 1:
     $p_x=5;
     $p_y=$this->img_size[1]-$str_height;
     break;
    case 2:
     $p_x=$this->img_size[0]-$str_width;
     $p_y=$this->img_size[1]-$str_height;
     break;
    case 3:
     $p_x=5;
     $p_y=0;
     break;
    case 4:
     $p_x=$this->img_size[0]-$str_width;
     $p_y=5;
     break;
    case 5:
     $p_x=($this->img_size[0]-$str_width)/2;
     $p_y=($this->img_size[1]-$str_height)/2;
     break;
   }
   imagecopy($im,$simage,0,0,0,0,$this->img_size[0],$this->img_size[1]);   //拷貝映像的一部分
   //imagefilledrectangle($im,1,$this->img_size[1]-15,130,$this->img_size[1],$white);  //將圖片的封閉長方形地區著色

   switch($this->watertype)
   {
    case 1:   //加浮水印字串
     imagestring($im,10,$p_x,$p_y,$this->waterstring,$red);
     break;
    case 2:   //加浮水印圖片
     $simage1 =imagecreatefromgif($this->waterimg);
     imagecopy($im,$simage1,0,0,0,0,85,15);
     imagedestroy($simage1);
     break;
   }

   switch ($imginfo[2])
   {
    case 1:
     //imagegif($nimage, $destination);
     imagejpeg($im, $this->destination);
     break;
    case 2:
     imagejpeg($im, $this->destination);
     break;
    case 3:
     imagepng($im, $this->destination);
     break;
    case 6:
     imagewbmp($im, $this->destination);
     break;
   }
   //覆蓋原上傳檔案
   imagedestroy($im);
   imagedestroy($simage);
  }
 }
}
?>

相關文章

聯繫我們

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