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