程序员的出路

alex.w的Blog

导航

文件上传类,包含水印和缩略图

Posted on 2008-11-22 14:50  alex.w  阅读(209)  评论(0)    收藏  举报

<?php


/*
 * Created on 2008-11-20
 * 文件上传类
 * developer by Alex.do QQ:20779512
 * PHP 5.0
 */

/******************************************************************************

参数说明:
$max_file_size  : 上传文件大小限制, 单位BYTE
$destination_folder : 上传文件路径
$watermark   : 是否附加水印(1为加水印,其他为不加水印);

使用说明:
1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;
2. 将extension_dir =改为你的php_gd2.dll所在目录;

使用例子
$up = new upload;
$up->fileName = $_FILES["upfile"];根据自己的表单来定
$up->imgpreview=1;是否生成缩略图
$up->sw=100;缩略图宽度
$up->sh=150;缩略图高度
$up->up();
echo $up->bImg."<br/>"; 返回图片路径
echo $up->sImg;返回图片路径
******************************************************************************/

class upload {

 //上传文件类型列表
 private $uptypes = array (
  'image/jpg',
  'image/jpeg',
  'image/png',
  'image/pjpeg',
  'image/gif',
  'image/bmp',
  'image/x-png'
 );

 private $max_file_size = 2000000; //上传文件大小限制, 单位BYTE
 private $destination_folder = "uploadimg/"; //上传文件路径
 private $watermark = 1; //是否附加水印(1为加水印,其他为不加水印);
 private $waterstring = "www.kfidc.com"; //水印字符串
 private $waterimg = "images/logo.gif"; //水印图片gif
 private $watertype = 2; //水印类型(1为文字,2为图片)

 public $fileName; //文件名称
 public $imgpreview; //是否生成缩略图(1为生成,其他为不生成);
 public $sw; //缩略图宽度
 public $sh; //缩略图高度
 public $bImg; //大图的路径
 public $sImg; //小图的路径

 function up() {

  if (!is_uploaded_file($this->fileName[tmp_name]))
   //是否存在文件
   {
   return $this->fileName . "图片不存在!";
   exit;
  }

  if ($this->max_file_size < $this->fileName["size"])
   //检查文件大小
   {
   return "图片太大了超过了$this->max_file_size的限制";
   exit;
  }
  //检查文件类型
  if (!in_array($this->fileName["type"], $this->uptypes)) {
   return "文件类型错误";
   exit;
  }
  //创建文件目录
  if (!file_exists($this->destination_folder)) {
   mkdir($this->destination_folder);
  }
  //上传文件
  $tempName = $this->fileName["tmp_name"];
  $fType = pathinfo($this->fileName["name"]);
  $fType = $fType["extension"];
  $newName = $this->destination_folder;
  $sImgName = $this->destination_folder;
  $newName .= time();
  $sImgName .="small".time();
  $newName .= "." . $fType;
  $sImgName .= "." . $fType;
  if (!move_uploaded_file($tempName, $newName)) {
   return "移动文件出错";
   exit;
  } else {

   //是否生成缩略图
   if($this->imgpreview == 1){

    $data=GetImageSize($newName);
    switch ($data[2]) {
     case 1 :
      $sImg = imagecreatefromgif($newName);
      break;
     case 2 :
      $sImg = imagecreatefromjpeg($newName);
      break;
     case 3 :
      $sImg = imagecreatefrompng($newName);
      break;
     case 6 :
      $sImg = imagecreatefromwbmp($newName);
      break;
     default :
      die("不支持的文件类型");
      exit;
    }

    $sImgDate=imagecreatetruecolor($this->sw,$this->sh);
    imagecopyresized($sImgDate,$sImg,0,0,0,0,$this->sw,$this->sh,$data[0],$data[1]);
    switch ($data[2]) {
     case 1 :
      imagejpeg($sImgDate, $sImgName);
      break;
     case 2 :
      imagejpeg($sImgDate, $sImgName);
      break;
     case 3 :
      imagepng($sImgDate, $sImgName);
      break;
     case 6 :
      imagewbmp($sImgDate, $sImgName);
      break;
    }
    imagedestroy($sImgDate);
       imagedestroy($sImg);
    $this->sImg=$sImgName;
   }

   //是否增加水印
   if ($this->watermark == 1) {
    $iinfo = getimagesize($newName);
    $nimage = imagecreatetruecolor($iinfo[0], $iinfo[1]);
    $white = imagecolorallocate($nimage, 255, 255, 255);
    $black = imagecolorallocate($nimage, 0, 0, 0);
    $red = imagecolorallocate($nimage, 255, 0, 0);
    imagefill($nimage, 0, 0, $white);
    switch ($iinfo[2]) {
     case 1 :
      $simage = imagecreatefromgif($newName);
      break;
     case 2 :
      $simage = imagecreatefromjpeg($newName);
      break;
     case 3 :
      $simage = imagecreatefrompng($newName);
      break;
     case 6 :
      $simage = imagecreatefromwbmp($newName);
      break;
     default :
      die("不支持的文件类型");
      exit;
    }

    imagecopy($nimage, $simage, 0, 0, 0, 0, $iinfo[0], $iinfo[1]);

    switch ($this->watertype) {
     case 1 : //加水印字符串
      imagefilledrectangle($nimage, 1, $iinfo[1] - 15, 80, $iinfo[1], $white);
      imagestring($nimage, 2, 3, $iinfo[1] - 15, $this->waterstring, $black);
      break;
     case 2 : //加水印图片
      $simage1 = imagecreatefromgif($this->waterimg);
      $waterImg = getimagesize($this->waterimg);
      imagecopy($nimage, $simage1, 0, 0, 0, 0, $waterImg[0], $waterImg[1]);
      imagedestroy($simage1);
      break;
    }

    switch ($iinfo[2]) {
     case 1 :
      imagejpeg($nimage, $newName);
      break;
     case 2 :
      imagejpeg($nimage, $newName);
      break;
     case 3 :
      imagepng($nimage, $newName);
      break;
     case 6 :
      imagewbmp($nimage, $newName);
      break;
    }

    //覆盖原上传文件
    imagedestroy($nimage);
    imagedestroy($simage);
   }

   $this->bImg=$newName;
  }


 }

}
?>