A-A+

php图片上传类

2012年07月04日 PHP技术文章 评论 1 条 阅读 276 views 次

一个支持水印的PHP图片上传类,应用在网站上面挺不错,参数比较多,功能很全,自定义月份建立子目录,自定义时间建立文件名,自定义上传的类型,自定义上传文件的大小,以及图片文印各项的值,可以说基本上我们用到的上传功能都已经具备了。

和其它php类一样,单独作为一个php的图片上传类,设置自定义的参数,也可以以全局设置自定义的参数,将不用的直接停止掉即可。

<?php   
/****************************  
上传类 By:donnier  
****************************/  
class upload_class{   
private $ptname;    //上传表单名称;   
private $udname;    //是否以月份建立子目录(0为否,其他为真);   
private $ufname;    //是否以时间建立文件名(0为否,其他为真);   
private $ultype;    //上传文件类型;   
private $ulsize;    //上传文件大小;   
private $ulname;    //输出文件名称;   
private $ulpath;    //输出文件路径;   
private $wm;     //水印附加(0为不加,其他为加);   
private $wmtype;    //水印类型(0为文字,其他为图片);   
private $wmpic;     //水印图片;   
private $wmpicquality;   //图片质量;   
private $wmpictrans;   //图片透明;   
private $wmstr;     //水印字符;   
private $wmstrsize;    //字符大小;   
private $wmstrfont;    //字符字体;   
private $wmstrcolor;   //字符颜色;   
private $wmpos;     //水印位置(1为顶端居左,2为顶端居中,3为顶端居右……);   
function __construct($ptname='upfile',$udname=1,$ufname=1,$ultype=a
rray('image/jpg','image/jpeg','image/png','image/pjpeg','image/gi
f','image/bmp','image/xpng'),$wm=1,$wmtype=1,$wmpic='images/wm.gi
f',$ulsize=2097152,$ulpath='images/temp/',$wmpictrans=20,$wmpicq
uality=80,$wmstr='DONLINE',$wmstrsize=5,$wmstrfont='./font/cour.t
tf',$wmstrcolor='#ff0000',$wmpos=9){   
  $this->ptname=$_FILES[$ptname];   
  $this->udname=$udname;   
  $this->ufname=$ufname;   
  $this->ultype=$ultype;   
  $this->ulsize=$ulsize;   
  $this->ulpath=$ulpath;   
  $this->wm=$wm;   
  $this->wmtype=$wmtype;   
  $this->wmpic=$wmpic;   
  $this->wmpicquality=$wmpicquality;   
  $this->wmpictrans=$wmpictrans;   
  $this->wmstr=$wmstr;   
  $this->wmstrsize=$wmstrsize;   
  $this->wmstrfont=$wmstrfont;   
  $this->wmstrcolor=$wmstrcolor;   
  $this->wmpos=$wmpos;   
}   
function uploadfun(){   
  if($_SERVER['REQUEST_METHOD']=='POST'){   
   if(!is_uploaded_file($this->ptname['tmp_name']))$this->error
fun('上传失败!');   
   if(!in_array($this->ptname['type'],$this->ultype))$this->erro
rfun('不支持的文件类型!');   
   if($this->ulsize<$this->ptname['size'])$this->errorfun('文件
太大!');   
   if($this->udname){date_default_timezone_set('UTC');$this->ulpat
h=$this->ulpath.'month_'.date('Ym').'/';}   
   else{$this->ulpath=$this->ulpath;}   
   $this->createfun($this->ulpath);   
   if($this->ufname){$t=pathinfo($this->ptname['name']);$this->ulna
me=$this->ulpath.time().'.'.$t['extension'];}   
   else{$this->ulname=$this->ulpath.$this->ptname['name'];}
   if(file_exists($this->ulname))$this->errorfun('该文件已存在!');
   if(!move_uploaded_file($this->ptname['tmp_name'],$this->ulname)
)$this->errorfun('移动文件错误!');   
   $this->wmfun();   
   $this->errorfun('上传成功!');   
  }   
}   
function createfun($d){   
  if(!file_exists($d)){$this->createfun(dirname($d));mkdir($d);}
}   
function wmfun(){   
  if($this->wm){   
   if(file_exists($this->ulname)){   
    $groundimg=getimagesize($this->ulname);   
    $ow=$groundimg[0];   
    $oh=$groundimg[1];   
    switch($groundimg[2]){   
     case 1:$g=imagecreatefromgif($this->ulname);break;   
     case 2:$g=imagecreatefromjpeg($this->ulname);break;   
     case 3:$g=imagecreatefrompng($this->ulname);break;   
     case 4:$g=imagecreatefromwbmp($this->ulname);break;   
     default:$this->errorfun('不支持的背景图片类型!');   
    }   
   }   
   else{$this->errorfun('背景图片不存在!');}   
   if(file_exists($this->wmpic)){   
    $wmimg=getimagesize($this->wmpic);   
    $ww=$wmimg[0];   
    $wh=$wmimg[1];   
    switch($wmimg[2]){   
     case 1:$w=imagecreatefromgif($this->wmpic);break;   
     case 2:$w=imagecreatefromjpeg($this->wmpic);break;   
     case 3:$w=imagecreatefrompng($this->wmpic);break;   
     case 4:$w=imagecreatefromwbmp($this->wmpic);break;   
     default:$this->errorfun('不支持的水印图片类型!');   
    }   
   }   
   else{$this->errorfun('水印图片不存在!');}   
   switch($this->wmtype){   
    case 0:$tp=imagettfbbox(ceil($this->wmstrsize*2.5),0,$this->wm
strfont,$this->wmstr);$ww=$tp[2]-$tp[6];$wh=$tp[3]-$tp[7];unset($t
p);break;   
    case 1:$ww=$ww;$wh=$wh;break;   
    default:$ww=$ww;$wh=$wh;break;   
   }   
   if($ow<$ww || $oh<$wh)$this->errorfun('背景图片太小!无法生成水
印!');   
   switch($this->wmpos){     
    case 0:$x=rand(0,($ow-$ww));$y=rand(0,($oh-$wh));break;//随机
          case 1:$x=0;$y=0;break;//1为顶端居左        
          case 2:$x=($ow-$ww)/2;$y=0;break;//2为顶端居中        
          case 3:$x=$ow-$ww;$y=0;break;//3为顶端居右        
          case 4:$x=0;$y=($oh-$wh)/2;break;//4为中部居左        
          case 5:$x=($ow-$ww)/2;$y=($oh-$wh)/2;break;//5为中部居中
          case 6:$x=$ow-$ww;$y=($oh-$wh)/2;break;//6为中部居右
          case 7:$x=0;$y=$oh-$wh;break;//7为底端居左     
          case 8:$x=($ow-$ww)/2;$y=$oh-$wh;break;//8为底端居中
          case 9:$x=$ow-$ww;$y=$oh-$wh;break;//9为底端居右
          default:$x=rand(0,($ow-$ww));$y=rand(0,($oh-$wh));br
eak;//随机            
      }   
   imagealphablending($g, true);   
   switch($this->wmtype){   
    case 0:   
    if($this->wmstrcolor){$R=hexdec(substr($this->wmstrcolor,1,2)
);$G=hexdec(substr($this->wmstrcolor,3,2));$B=hexdec(substr($th
is->wmstrcolor,5));}   
    else{$this->errorfun('水印文字颜色不存在!');}   
    imagestring($g,$this->wmstrfont,$x,$y,$this->wmstr,imagecolo
rallocate($g,$R,$G,$B));break;   
    case 1;imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictran
s);break;   
    default:imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictra
ns);break;   
   }   
   @unlink($this->ulname);   
   switch($groundimg[2]){    
          case 1:imagegif($g,$this->ulname);break;    
          case 2:imagejpeg($g,$this->ulname,$this->wmpicquality
);break;    
          case 3:imagepng($g,$this->ulname);break;    
    case 4:imagewbmp($g,$this->ulname);break;   
          default:$this->errorfun('生成图片失败!');   
   }    
   if(isset($wmimg))unset($wmimg);    
      if(isset($w))imagedestroy($w);    
      unset($groundimg);    
      imagedestroy($g);    
  }   
}   
function errorfun($e='未知错误!'){   
  $msg='<script language="javascript" type="text/javascript">';
  $msg.='alert("'.$e.'");';   
  $msg.='history.back();';   
  $msg.='</script>';   
  echo $msg;   
  exit;   
}   
}   
?>

1 条留言  访客:1 条  博主:0 条

  1. zeno

    木法复制

给我留言