php专区

 首页 > php专区 > PHP应用 > php类库 > php图片上传类,支持加水印,生成略缩图 - php类库

php图片上传类,支持加水印,生成略缩图 - php类库

分享到:
【字体:
导读:
          分享一个网友写的php图片上传类,支持加水印,生成略缩图功能,里面是配置和可以获取的一些信息,每一个配置信息都有默认值,如无特殊需要,可以不配置,PHP类代码如下:?php/*-----------------...

php图片上传类,支持加水印,生成略缩图

分享一个网友写的php图片上传类,支持加水印,生成略缩图功能,里面是配置和可以获取的一些信息,每一个配置信息都有默认值,如无特殊需要,可以不配置,PHP类代码如下:

  1. /*---------------------------------------------------------------------------------- 
  2.  *  
  3.  *----------------------------------------------------------------------------------  
  4.  */ 
  5. class image_up{ 
  6.  //定义基本参数 
  7.  private $uptype=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png');  //上传文件类型 
  8.  private $max_file_size=102400;    //上传大小限制(单位:KB) 
  9.  private $destination_folder="up/"//上传文件路径 
  10.  private $watermark=1;              //是否附加水印 
  11.  private $watertype=1;              //水印类型(1为文字,2为图片) 
  12.  private $waterposition=1;          //水印位置(1为左下角,2为右下角,3为左上角,4为右上角,5为居中); 
  13.  private $waterstring=null;         //水印字符串 
  14.  private $waterimg=null;            //水印图片 
  15.  private $imgpreview=1;             //是否生成预览图(1为生成,其他为不生成); 
  16.  private $imgpreviewsize=1;         //预览图比例,0为按固定宽和高显示,其他为比例显示 
  17.  private $imgwidth=200;             //预览图固定宽度 
  18.  private $imgheight=200;            //预览图固定高度 
  19.  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
  20.  private $imgthu=1;                     //是否生成且保存略缩图,1为生成,0为不生成 
  21.  private $imgthu_folder=null;           //略缩图保存路径,默认与文件路径一致 
  22.  private $imgthu_fixed=0;               //略缩图是否使用固定宽高,1为使用,0为灵活变动 
  23.  private $imgthu_width=200;             //略缩图宽度 
  24.  private $imgthu_height=200;            //略缩图高度 
  25.   
  26.  private $imgthu_name=null;             //略缩图名称 
  27.  //****************************************************************************************************************** 
  28.  private $inputname="upfile";       //文件上传框名称 
  29.  //****************************************************************************************************************** 
  30.  private $img_preview_display;      //图片预览图显示 
  31.  //****************************************************************************************************************** 
  32.  //文件上传相关信息,1为文件不存在,2为类型不符合,3为超出大小限制,4为上传失败,0为上传成功 
  33.  private $file_up_info=null; 
  34.  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
  35.  //可在外部获取上传文件基本信息 
  36.  private $file_name;         //客服端文件的原名称 
  37.  private $file_type;         //文件的MIME类型 
  38.  private $file_size;         //已上传文件的大小,单位/字节 
  39.  private $file_tmp_name;     //储存的临时文件名 
  40.  private $file_error;        //该文件上传相关错误代码 
  41.  
  42.  private $img_size;          //取得图片的长宽 
  43.  private $file_basename;     //获取带扩展名的全名 
  44.  private $file_extension;    //获取文件扩展名 
  45.  private $filename;          //文件名(不带扩展名) 
  46.  private $destination;       //问价路径加名称 
  47.  //****************************************************************************************************************** 
  48.  public function __set($propety_name,$value){ 
  49.   $this->$propety_name=$value
  50.  } 
  51.  public function __get($property_name){ 
  52.   if(isset($this->$property_name)) 
  53.   return($this->$property_name); 
  54.   else return(NULL); 
  55.  } 
  56.  //****************************************************************************************************************** 
  57.  //定义文件上传功能 
  58.  public function up(){ 
  59.   //判断文件是否存在 
  60.   if(!is_uploaded_file($_FILES[$this->inputname]["tmp_name"])){ 
  61.    $this->file_up_info=1; 
  62.    return
  63.   } 
  64.   //获取并赋值相应基本参数 
  65.   $upfile=$_FILES[$this->inputname]; 
  66.   $this->file_name=$upfile["name"]; 
  67.   $this->file_type=$upfile["type"]; 
  68.   $this->file_size=$upfile["size"]; 
  69.   $this->file_tmp_name=$upfile["tmp_name"]; 
  70.   $this->file_error=$upfile["error"]; 
  71.   //检查文件类型是否符合 
  72.   if(!in_array($this->file_type,$this->uptype)){ 
  73.    $this->file_up_info=2; 
  74.    return
  75.   } 
  76.   //检查文件大小是否超出限制 
  77.   if($this->file_size>$this->max_file_size){ 
  78.    $this->file_up_info=3; 
  79.    return
  80.   } 
  81.   //判断目录是否存在 
  82.   if(!file_exists($this->destination_folder)) 
  83.   mkdir($this->destination_folder); 
  84.   //进一步取得图片的信息并赋值 
  85.   $this->img_size=getimagesize($this->file_tmp_name); 
  86.   $pathinfo=pathinfo($this->file_name); 
  87.   $this->file_extension=$pathinfo["extension"];    //获取文件扩展名 
  88.   $this->file_basename=$pathinfo["basename"];      //获取带扩展名的全名 
  89.   $this->filename=$pathinfo["filename"];           //文件名(不带扩展名) 
  90.   $filename2=$pathinfo['filename']; 
  91.   $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension; 
  92.   //判断文件名是否存在,如果存在则重命名 
  93.   $n=1; 
  94.   while (file_exists($this->destination)){ 
  95.    while (file_exists($this->destination)){ 
  96.     $n++; 
  97.     $this->filename=$this->filename."(".$n.")"
  98.     $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension; 
  99.    } 
  100.    $this->filename=$filename2."(".$n.")"
  101.    $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension; 
  102.   } 
  103.   //移动上传的文件 
  104.   if(move_uploaded_file($this->file_tmp_name,$this->destination)) 
  105.   $this->file_up_info=0; 
  106.   else $this->file_up_info=4; 
  107.     
  108.   //添加水印 
  109.   if($this->watermark==1){ 
  110.    $this->imgthu(); 
  111.   } 
  112.   //生成略缩图 
  113.   if($this->imgthu==1){ 
  114.    $this->add_watermark(); 
  115.   } 
  116.   //生成预览图 
  117.   if($this->imgpreviewsize == 0){ 
  118.    if($this->img_size["0"]<$this->imgwidth) $this->imgwidth=$this->img_size["0"]; 
  119.    if($this->img_size["1"]<$this->imgheight) $this->imgheight=$this->img_size["1"]; 
  120.   }else
  121.    $this->imgwidth=$this->img_size["0"]*$this->imgpreviewsize; 
  122.    $this->imgheight=$this->img_size["1"]*$this->imgpreviewsize; 
  123.   } 
  124.   $this->img_preview_display="'$this->destination' width='$this->imgwidth' height='$this->imgheight' 
  125.                                     alt='图片预览:r文件名'$this->file_tmp_name />"; 
  126.  } 
  127. //==================================================================================================================== 
  128. //====================================================================================================================  
  129.  //生成略缩图功能 
  130.  function imgthu(){ 
  131.   if($this->imgthu_folder==null) 
  132.     $this->imgthu_folder=$this->destination_folder; 
  133.    
  134.   //$this->imgthu_name=$this->filename."_t.".$this->file_extension; 
  135.   $imgthu_name_b=$this->filename."_t"
  136.   $imgthu_name_b2=$this->filename."_t"
  137.   $destination_b=$this->imgthu_folder.$imgthu_name_b.".".$this->file_extension; 
  138.      //判断文件名是否存在,如果存在则重命名 
  139.   $n=1; 
  140.   while (file_exists($destination_b)){ 
  141.    while (file_exists($destination_b)){ 
  142.     $n++; 
  143.     $imgthu_name_b=$imgthu_name_b."(".$n.")"
  144.     $destination_b = $this->imgthu_folder.$imgthu_name_b.".".$this->file_extension; 
  145.    } 
  146.    $imgthu_name_b=$imgthu_name_b2."(".$n.")"
  147.    $destination_b = $this->imgthu_folder.$imgthu_name_b.".".$this->file_extension; 
  148.   } 
  149.    
  150.    
  151.   $imginfo=getimagesize($this->destination); 
  152.   switch($imginfo[2]) 
  153.   { 
  154.    case 1: 
  155.     $in=@imagecreatefromgif($this->destination); 
  156.     break
  157.    case 2: 
  158.     $in=@imagecreatefromjpeg($this->destination); 
  159.     break
  160.    case 3: 
  161.     $in=@imagecreatefrompng($this->destination); 
  162.     break
  163.    case 6: 
  164.     $in =@imagecreatefrombmp($this->destination); 
  165.     break
  166.    default
  167.     break
  168.   } 
  169.   //计算略缩图长宽 
  170.   if($this->imgthu_fixed==0){ 
  171.    if($this->imgthu_height>($imginfo[1]/$imginfo[0])*$this->imgthu_width) 
  172.     $this->imgthu_width = ($imginfo[0]/$imginfo[1])*$this->imgthu_height; 
  173.    else 
  174.     $this->imgthu_height=($imginfo[1]/$imginfo[0])*$this->imgthu_width; 
  175.   } 
  176.   $new = imageCreateTrueColor($this->imgthu_width,$this->imgthu_height); 
  177.   ImageCopyResized($new,$in,0,0,0,0,$this->imgthu_width,$this->imgthu_height,$imginfo[0],$imginfo[1]); 
  178.   switch ($imginfo[2]) 
  179.   { 
  180.    case 1: 
  181.     imagejpeg($new,$destination_b); 
  182.     break
  183.    case 2: 
  184.     imagejpeg($new,$destination_b); 
  185.     break
  186.    case 3: 
  187.     imagepng($new,$destination_b); 
  188.     break
  189.    case 6: 
  190.     imagewbmp($new,$destination_b); 
  191.     break
  192.   } 
  193.  } 
  194. //==================================================================================================================== 
  195. //====================================================================================================================  
  196.  //添加水印功能 
  197.  function add_watermark(){ 
  198.   //1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order), 
  199.   //8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。 
  200.   $imginfo=getimagesize($this->destination); 
  201.   $im=imagecreatetruecolor($this->img_size[0],$this->img_size[1]);       //创建真彩色 
  202.   $white=imagecolorallocate($im,255,255,255);                            //设置颜色 
  203.   $black=imagecolorallocate($im,0,0,0); 
  204.   $red=imagecolorallocate($im,255,0,0); 
  205.   //在 image 图像的坐标 x,y(图像左上角为 0, 0)处用 color 颜色执行区域填充(即与 x, y 点颜色相同且相邻的点都会被填充)。 
  206.   imagefill($im,0,0,$white); 
  207.  
  208.   switch($imginfo[2]) 
  209.   { 
  210.    case 1: 
  211.     $simage =imagecreatefromgif($this->destination);      // 创建一个新的形象,从文件或 URL 
  212.     break
  213.    case 2: 
  214.     $simage =imagecreatefromjpeg($this->destination); 
  215.     break
  216.    case 3: 
  217.     $simage =imagecreatefrompng($this->destination); 
  218.     break
  219.    case 6: 
  220.     $simage =imagecreatefromwbmp($this->destination); 
  221.     break
  222.    default
  223.     echo ("不支持的文件类型"); 
  224.     break
  225.   } 
  226.   if(!emptyempty($simage)) 
  227.   { 
  228.    //位置设置 
  229.    if($this->watertype==1){ 
  230.     $str_len=strlen($this->waterstring); 
  231.        $str_width=$str_len*10; 
  232.        $str_height=20; 
  233.    }elseif($this->watertype==1 && file_exists($this->waterimg)){ 
  234.     $iinfo=getimagesize($this->waterimg); 
  235.     $str_width = $iinfo[0]; 
  236.     $str_height = $iinfo[1]; 
  237.    } 
  238.     
  239.    switch ($this->waterposition){ 
  240.     case 1: 
  241.      $p_x=5; 
  242.      $p_y=$this->img_size[1]-$str_height
  243.      break
  244.     case 2: 
  245.      $p_x=$this->img_size[0]-$str_width
  246.      $p_y=$this->img_size[1]-$str_height
  247.      break
  248.     case 3: 
  249.      $p_x=5; 
  250.      $p_y=0; 
  251.      break
  252.     case 4: 
  253.      $p_x=$this->img_size[0]-$str_width
  254.      $p_y=5; 
  255.      break
  256.     case 5: 
  257.      $p_x=($this->img_size[0]-$str_width)/2; 
  258.      $p_y=($this->img_size[1]-$str_height)/2; 
  259.      break
  260.    } 
  261.    imagecopy($im,$simage,0,0,0,0,$this->img_size[0],$this->img_size[1]);   //拷贝图像的一部分 
  262.    //imagefilledrectangle($im,1,$this->img_size[1]-15,130,$this->img_size[1],$white);  //将图片的封闭长方形区域着色 
  263.  
  264.    switch($this->watertype) 
  265.    { 
  266.     case 1:   //加水印字符串 
  267.      imagestring($im,10,$p_x,$p_y,$this->waterstring,$red); 
  268.      break
  269.     case 2:   //加水印图片 
  270.      $simage1 =imagecreatefromgif($this->waterimg); 
  271.      imagecopy($im,$simage1,0,0,0,0,85,15); 
  272.      imagedestroy($simage1); 
  273.      break
  274.    } 
  275.  
  276.    switch ($imginfo[2]) 
  277.    { 
  278.     case 1: 
  279.      //imagegif($nimage, $destination); 
  280.      imagejpeg($im$this->destination); 
  281.      break
  282.     case 2: 
  283.      imagejpeg($im$this->destination); 
  284.      break
  285.     case 3: 
  286.      imagepng($im$this->destination); 
  287.      break;//开源代码phpfensi.com 
  288.     case 6: 
  289.      imagewbmp($im$this->destination); 
  290.      break
  291.    } 
  292.    //覆盖原上传文件 
  293.    imagedestroy($im); 
  294.    imagedestroy($simage); 
  295.   } 
  296.  } 
  297. ?> 
分享到:
MySQL数据库PHP操作类 - php类库
MySQL数据库PHP操作类 下面是一个站长写的一个非常简单实用的数据库操作类了,这里面主要功能是数据库连接,查询数据,删除数据,更新数据等等,这个类的特点时不限制mysql而是直接执行由外部给出的sql语句了. MySQL数据库PHP操作类,代码如下:
两个php日期控制类 - php类库
两个php日期控制类 由于工作需要我找了二个时间日期控制,这个不用js只要php实现的,因为要带参考查询所以操作了操作,有需要的朋友可以参考一下,我自己用的是第二个,所以第二个己作了修改. 实例一,代码如下:
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……