国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > PHP > 正文

php圖片上傳類,支持加水印,生成略縮圖

2024-09-04 11:44:10
字體:
來源:轉載
供稿:網友

分享一個網友寫的php圖片上傳類,支持加水印,生成略縮圖功能,里面是配置和可以獲取的一些信息,每一個配置信息都有默認值,如無特殊需要,可以不配置,PHP類代碼如下:

  1. <?php 
  2. /*---------------------------------------------------------------------------------- 
  3.  *  
  4.  *----------------------------------------------------------------------------------  
  5.  */ 
  6. class image_up{ 
  7.  //定義基本參數 
  8.  private $uptype=array('image/jpg','image/jpeg','image/png','image/pjpeg','image/gif','image/bmp','image/x-png');  //上傳文件類型 
  9.  private $max_file_size=102400;    //上傳大小限制(單位:KB) 
  10.  private $destination_folder="up/"//上傳文件路徑 
  11.  private $watermark=1;              //是否附加水印 
  12.  private $watertype=1;              //水印類型(1為文字,2為圖片) 
  13.  private $waterposition=1;          //水印位置(1為左下角,2為右下角,3為左上角,4為右上角,5為居中); 
  14.  private $waterstring=null;         //水印字符串 
  15.  private $waterimg=null;            //水印圖片 
  16.  private $imgpreview=1;             //是否生成預覽圖(1為生成,其他為不生成); 
  17.  private $imgpreviewsize=1;         //預覽圖比例,0為按固定寬和高顯示,其他為比例顯示 
  18.  private $imgwidth=200;             //預覽圖固定寬度 
  19.  private $imgheight=200;            //預覽圖固定高度 
  20.  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
  21.  private $imgthu=1;                     //是否生成且保存略縮圖,1為生成,0為不生成 
  22.  private $imgthu_folder=null;           //略縮圖保存路徑,默認與文件路徑一致 
  23.  private $imgthu_fixed=0;               //略縮圖是否使用固定寬高,1為使用,0為靈活變動 
  24.  private $imgthu_width=200;             //略縮圖寬度 
  25.  private $imgthu_height=200;            //略縮圖高度 
  26.   
  27.  private $imgthu_name=null;             //略縮圖名稱 
  28.  //****************************************************************************************************************** 
  29.  private $inputname="upfile";       //文件上傳框名稱 
  30.  //****************************************************************************************************************** 
  31.  private $img_preview_display;      //圖片預覽圖顯示 
  32.  //****************************************************************************************************************** 
  33.  //文件上傳相關信息,1為文件不存在,2為類型不符合,3為超出大小限制,4為上傳失敗,0為上傳成功 
  34.  private $file_up_info=null; 
  35.  //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
  36.  //可在外部獲取上傳文件基本信息 
  37.  private $file_name;         //客服端文件的原名稱 
  38.  private $file_type;         //文件的MIME類型 
  39.  private $file_size;         //已上傳文件的大小,單位/字節 
  40.  private $file_tmp_name;     //儲存的臨時文件名 
  41.  private $file_error;        //該文件上傳相關錯誤代碼 
  42.  
  43.  private $img_size;          //取得圖片的長寬 
  44.  private $file_basename;     //獲取帶擴展名的全名 
  45.  private $file_extension;    //獲取文件擴展名 
  46.  private $filename;          //文件名(不帶擴展名) 
  47.  private $destination;       //問價路徑加名稱 
  48.  //****************************************************************************************************************** 
  49.  public function __set($propety_name,$value){ 
  50.   $this->$propety_name=$value
  51.  } 
  52.  public function __get($property_name){ 
  53.   if(isset($this->$property_name)) 
  54.   return($this->$property_name); 
  55.   else return(NULL); 
  56.  } 
  57.  //****************************************************************************************************************** 
  58.  //定義文件上傳功能 
  59.  public function up(){ 
  60.   //判斷文件是否存在 
  61.   if(!is_uploaded_file($_FILES[$this->inputname]["tmp_name"])){ 
  62.    $this->file_up_info=1; 
  63.    return
  64.   } 
  65.   //獲取并賦值相應基本參數 
  66.   $upfile=$_FILES[$this->inputname]; 
  67.   $this->file_name=$upfile["name"]; 
  68.   $this->file_type=$upfile["type"]; 
  69.   $this->file_size=$upfile["size"]; 
  70.   $this->file_tmp_name=$upfile["tmp_name"]; 
  71.   $this->file_error=$upfile["error"]; 
  72.   //檢查文件類型是否符合 
  73.   if(!in_array($this->file_type,$this->uptype)){ 
  74.    $this->file_up_info=2; 
  75.    return
  76.   } 
  77.   //檢查文件大小是否超出限制 
  78.   if($this->file_size>$this->max_file_size){ 
  79.    $this->file_up_info=3; 
  80.    return
  81.   } 
  82.   //判斷目錄是否存在 
  83.   if(!file_exists($this->destination_folder)) 
  84.   mkdir($this->destination_folder); 
  85.   //進一步取得圖片的信息并賦值 
  86.   $this->img_size=getimagesize($this->file_tmp_name); 
  87.   $pathinfo=pathinfo($this->file_name); 
  88.   $this->file_extension=$pathinfo["extension"];    //獲取文件擴展名 
  89.   $this->file_basename=$pathinfo["basename"];      //獲取帶擴展名的全名 
  90.   $this->filename=$pathinfo["filename"];           //文件名(不帶擴展名) 
  91.   $filename2=$pathinfo['filename']; 
  92.   $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension; 
  93.   //判斷文件名是否存在,如果存在則重命名 
  94.   $n=1; 
  95.   while (file_exists($this->destination)){ 
  96.    while (file_exists($this->destination)){ 
  97.     $n++; 
  98.     $this->filename=$this->filename."(".$n.")"
  99.     $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension; 
  100.    } 
  101.    $this->filename=$filename2."(".$n.")"
  102.    $this->destination = $this->destination_folder.$this->filename.".".$this->file_extension; 
  103.   } 
  104.   //移動上傳的文件 
  105.   if(move_uploaded_file($this->file_tmp_name,$this->destination)) 
  106.   $this->file_up_info=0; 
  107.   else $this->file_up_info=4; 
  108.     
  109.   //添加水印 
  110.   if($this->watermark==1){ 
  111.    $this->imgthu(); 
  112.   } 
  113.   //生成略縮圖 
  114.   if($this->imgthu==1){ 
  115.    $this->add_watermark(); 
  116.   } 
  117.   //生成預覽圖 
  118.   if($this->imgpreviewsize == 0){ 
  119.    if($this->img_size["0"]<$this->imgwidth) $this->imgwidth=$this->img_size["0"]; 
  120.    if($this->img_size["1"]<$this->imgheight) $this->imgheight=$this->img_size["1"]; 
  121.   }else
  122.    $this->imgwidth=$this->img_size["0"]*$this->imgpreviewsize; 
  123.    $this->imgheight=$this->img_size["1"]*$this->imgpreviewsize; 
  124.   } 
  125.   $this->img_preview_display="<img src='$this->destination' width='$this->imgwidth' height='$this->imgheight' 
  126.                                     alt='圖片預覽:r文件名'$this->file_tmp_name />"; 
  127.  } 
  128. //==================================================================================================================== 
  129. //====================================================================================================================  
  130.  //生成略縮圖功能 
  131.  function imgthu(){ 
  132.   if($this->imgthu_folder==null) 
  133.     $this->imgthu_folder=$this->destination_folder; 
  134.    
  135.   //$this->imgthu_name=$this->filename."_t.".$this->file_extension; 
  136.   $imgthu_name_b=$this->filename."_t"
  137.   $imgthu_name_b2=$this->filename."_t"
  138.   $destination_b=$this->imgthu_folder.$imgthu_name_b.".".$this->file_extension; 
  139.      //判斷文件名是否存在,如果存在則重命名 
  140.   $n=1; 
  141.   while (file_exists($destination_b)){ 
  142.    while (file_exists($destination_b)){ 
  143.     $n++; 
  144.     $imgthu_name_b=$imgthu_name_b."(".$n.")"
  145.     $destination_b = $this->imgthu_folder.$imgthu_name_b.".".$this->file_extension; 
  146.    } 
  147.    $imgthu_name_b=$imgthu_name_b2."(".$n.")"
  148.    $destination_b = $this->imgthu_folder.$imgthu_name_b.".".$this->file_extension; 
  149.   } 
  150.    
  151.    
  152.   $imginfo=getimagesize($this->destination); 
  153.   switch($imginfo[2]) 
  154.   { 
  155.    case 1: 
  156.     $in=@imagecreatefromgif($this->destination); 
  157.     break
  158.    case 2: 
  159.     $in=@imagecreatefromjpeg($this->destination); 
  160.     break
  161.    case 3: 
  162.     $in=@imagecreatefrompng($this->destination); 
  163.     break
  164.    case 6: 
  165.     $in =@imagecreatefrombmp($this->destination); 
  166.     break
  167.    default
  168.     break
  169.   } 
  170.   //計算略縮圖長寬 
  171.   if($this->imgthu_fixed==0){ 
  172.    if($this->imgthu_height>($imginfo[1]/$imginfo[0])*$this->imgthu_width) 
  173.     $this->imgthu_width = ($imginfo[0]/$imginfo[1])*$this->imgthu_height; 
  174.    else 
  175.     $this->imgthu_height=($imginfo[1]/$imginfo[0])*$this->imgthu_width; 
  176.   } 
  177.   $new = imageCreateTrueColor($this->imgthu_width,$this->imgthu_height); 
  178.   ImageCopyResized($new,$in,0,0,0,0,$this->imgthu_width,$this->imgthu_height,$imginfo[0],$imginfo[1]); 
  179.   switch ($imginfo[2]) 
  180.   { 
  181.    case 1: 
  182.     imagejpeg($new,$destination_b); 
  183.     break
  184.    case 2: 
  185.     imagejpeg($new,$destination_b); 
  186.     break
  187.    case 3: 
  188.     imagepng($new,$destination_b); 
  189.     break
  190.    case 6: 
  191.     imagewbmp($new,$destination_b); 
  192.     break
  193.   } 
  194.  } 
  195. //==================================================================================================================== 
  196. //====================================================================================================================  
  197.  //添加水印功能 
  198.  function add_watermark(){ 
  199.   //1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order), 
  200.   //8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。 
  201.   $imginfo=getimagesize($this->destination); 
  202.   $im=imagecreatetruecolor($this->img_size[0],$this->img_size[1]);       //創建真彩色 
  203.   $white=imagecolorallocate($im,255,255,255);                            //設置顏色 
  204.   $black=imagecolorallocate($im,0,0,0); 
  205.   $red=imagecolorallocate($im,255,0,0); 
  206.   //在 image 圖像的坐標 x,y(圖像左上角為 0, 0)處用 color 顏色執行區域填充(即與 x, y 點顏色相同且相鄰的點都會被填充)。 
  207.   imagefill($im,0,0,$white); 
  208.  
  209.   switch($imginfo[2]) 
  210.   { 
  211.    case 1: 
  212.     $simage =imagecreatefromgif($this->destination);      // 創建一個新的形象,從文件或 URL 
  213.     break
  214.    case 2: 
  215.     $simage =imagecreatefromjpeg($this->destination); 
  216.     break
  217.    case 3: 
  218.     $simage =imagecreatefrompng($this->destination); 
  219.     break
  220.    case 6: 
  221.     $simage =imagecreatefromwbmp($this->destination); 
  222.     break
  223.    default
  224.     echo ("不支持的文件類型"); 
  225.     break
  226.   } 
  227.   if(!emptyempty($simage)) 
  228.   { 
  229.    //位置設置 
  230.    if($this->watertype==1){ 
  231.     $str_len=strlen($this->waterstring); 
  232.        $str_width=$str_len*10; 
  233.        $str_height=20; 
  234.    }elseif($this->watertype==1 && file_exists($this->waterimg)){ 
  235.     $iinfo=getimagesize($this->waterimg); 
  236.     $str_width = $iinfo[0]; 
  237.     $str_height = $iinfo[1]; 
  238.    } 
  239.     
  240.    switch ($this->waterposition){ 
  241.     case 1: 
  242.      $p_x=5; 
  243.      $p_y=$this->img_size[1]-$str_height
  244.      break
  245.     case 2: 
  246.      $p_x=$this->img_size[0]-$str_width
  247.      $p_y=$this->img_size[1]-$str_height
  248.      break
  249.     case 3: 
  250.      $p_x=5; 
  251.      $p_y=0; 
  252.      break
  253.     case 4: 
  254.      $p_x=$this->img_size[0]-$str_width
  255.      $p_y=5; 
  256.      break
  257.     case 5: 
  258.      $p_x=($this->img_size[0]-$str_width)/2; 
  259.      $p_y=($this->img_size[1]-$str_height)/2; 
  260.      break
  261.    } 
  262.    imagecopy($im,$simage,0,0,0,0,$this->img_size[0],$this->img_size[1]);   //拷貝圖像的一部分 
  263.    //imagefilledrectangle($im,1,$this->img_size[1]-15,130,$this->img_size[1],$white);  //將圖片的封閉長方形區域著色 
  264.  
  265.    switch($this->watertype) 
  266.    { 
  267.     case 1:   //加水印字符串 
  268.      imagestring($im,10,$p_x,$p_y,$this->waterstring,$red); 
  269.      break
  270.     case 2:   //加水印圖片 
  271.      $simage1 =imagecreatefromgif($this->waterimg); 
  272.      imagecopy($im,$simage1,0,0,0,0,85,15); 
  273.      imagedestroy($simage1); 
  274.      break
  275.    } 
  276.  
  277.    switch ($imginfo[2]) 
  278.    { 
  279.     case 1: 
  280.      //imagegif($nimage, $destination); 
  281.      imagejpeg($im$this->destination); 
  282.      break
  283.     case 2: 
  284.      imagejpeg($im$this->destination); 
  285.      break
  286.     case 3: 
  287.      imagepng($im$this->destination); 
  288.      break;//開源代碼Vevb.com 
  289.     case 6: 
  290.      imagewbmp($im$this->destination); 
  291.      break
  292.    } 
  293.    //覆蓋原上傳文件 
  294.    imagedestroy($im); 
  295.    imagedestroy($simage); 
  296.   } 
  297.  } 
  298. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新龙县| 昭苏县| 沙湾县| 惠东县| 邓州市| 轮台县| 天门市| 东兴市| 辉南县| 龙泉市| 时尚| 万安县| 张家口市| 海门市| 大邑县| 老河口市| 兰考县| 惠安县| 密山市| 东乌珠穆沁旗| 应城市| 崇义县| 广安市| 莱州市| 子长县| 湾仔区| 朝阳市| 昌黎县| 两当县| 周宁县| 尉氏县| 准格尔旗| 铁岭县| 永德县| 三亚市| 清涧县| 社旗县| 宁强县| 平潭县| 丹阳市| 长沙县|