• 沙里软件

  • ShaliSoft.com [手机站]   办公桌收纳抽屉
  • 首页
  • 博文
  • 演示
  • 管理
  • php图片上传类,支持加水印,生成略缩图

    网络   2013/10/3 22:25:11

    分享一个网友写的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);
      }
     }
    }
    ?>


    阅读(70785) 分享(0)

    上一篇: php sso单点登录实现代码
    下一篇: php解析 JSON 数据

  • 精彩推荐

    ◆ Windows Server 2003操作系统单网卡搭建VPN服务器
    ◆ PHP中9大缓存技术总结
    ◆ 微信订阅号授权登录,订阅号怎么实现网页授权登录?
    ◆ jQuery对应的原生js写法
    ◆ 国外程序员整理的PHP资源大全
    ◆ ASP语言使用淘宝接口遇中文字符签名失败解决方法
    ◆ 大型网站图片服务器架构的演
    ◆ php+Mysql 高速分页优化,百万至千万级快速分页
    ◆ 从MyISAM转到InnoDB需要注意什么
    ◆ 新型DDoS攻击LFA 网易网络被攻击原因
  • 用心做事 不能唯利是图

    • 吊儿
    • 用QQ联系我17905772
  • 搜索


  • 最新文章

    • MySQL配置优化
    • EditPlus 添加文件比较工具winmerge
    • 滚动悬浮固定JS特效
    • Windows Server 2003操作系统单网卡搭建VPN服务器
    • 安装完office后 在组件服务里DCOM配置中找不到

  • 热门文章

    • php sso单点登录实现代码
    • 中国菜刀(China chopper) 最新黑客工具
    • redis.conf中文版(基于2.4)
    • 搜索引擎名单大全
    • php图片上传类,支持加水印,生成略缩图

  • 最新图库


  • 最新评论


  • 友情链接

  • 沙里软件

  • 最近访客

    Powered by ShaliSoft.com 豫ICP备13008529号

    免责声明:本站部分内容来源于互联网,转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责,也不构成任何其他建议。如果发现侵犯版权,联系QQ17905772进行删除。