程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php圖片上傳類,支持加水印,生成略縮圖

php圖片上傳類,支持加水印,生成略縮圖

編輯:關於PHP編程

分享一個網友寫的php圖片上傳類,支持加水印,生成略縮圖功能哦,面是配置和可以獲取的一些信息(每一個配置信息都有默認值,如無特殊需要,可以不配置):  代碼如下 復制代碼

<?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);
  }
 }
}
?>


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved