• 技术文章 >php教程 >php手册

    php图片上传类

    2016-06-13 11:22:36原创387
    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=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png'),$wm=1,$wmtype=1,$wmpic='images/wm.gif',$ulsize=2097152,$ulpath='images/temp/',$wmpictrans=20,$wmpicquality=80,$wmstr='DONLINE',$wmstrsize=5,$wmstrfont='./font/cour.ttf',$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->errorfun('上传失败!');
    if(!in_array($this->ptname['type'],$this->ultype))$this->errorfun('不支持的文件类型!');
    if($this->ulsize<$this->ptname['size'])$this->errorfun('文件太大!');
    if($this->udname){date_default_timezone_set('UTC');$this->ulpath=$this->ulpath.'month_'.date('Ym').'//m.sbmmt.com/m/';}
    else{$this->ulpath=$this->ulpath;}
    $this->createfun($this->ulpath);
    if($this->ufname){$t=pathinfo($this->ptname['name']);$this->ulname=$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->wmstrfont,$this->wmstr);$ww=$tp[2]-$tp[6];$wh=$tp[3]-$tp[7];unset($tp);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));break;//随机
    }
    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($this->wmstrcolor,5));}
    else{$this->errorfun('水印文字颜色不存在!');}
    imagestring($g,$this->wmstrfont,$x,$y,$this->wmstr,imagecolorallocate($g,$R,$G,$B));break;
    case 1;imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictrans);break;
    default:imagecopymerge($g,$w,$x,$y,0,0,$ww,$wh,$this->wmpictrans);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='';
    echo $msg;
    exit;
    }
    }
    ?>
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php 模板标签入门教程[file_get_content] 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 利用PHP实现智能文件类型检测的实现代码• 建立文件交换功能的脚本(二)• PHP教程.应用实例2 • 通过缓存数据库结果提高PHP性能• 对MVC的理解,MVC理解
    1/1

    PHP中文网