分享一個網友寫的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);
}
}
}
?>