首页 > 语言 > PHP > 正文

php支持生成缩略图文件上传代码

2024-09-04 11:44:22
字体:
来源:转载
供稿:网友
  1. <!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"
  2. <html xmlns="http://www.w3.org/1999/xhtml"
  3. <head> 
  4. <meta http-equiv="content-type" content="text/html; charset=gb2312" /> 
  5. <title>无标题文档</title> 
  6. </head> 
  7.  
  8. <body> 
  9. <?php 
  10.  
  11. class upfileclass { 
  12.  
  13.  var $upfile$upfile_name$upfile_size
  14.  # $upfile 临时文件名 $_files['tmp_name'] ,$upfile_name 文件名 $_files['name'] ,$upfile_size 文件大小$_files['size']; 
  15.  
  16.  var $new_upfile_name;   # 上传后的文件名称 ;  
  17.  var $fleth$fileextent; # 文件扩展名(类型) ;  
  18.  var $f1$f2$f3;   # 文件保存路径(多级) upfiles/2008-01/08/; 
  19.  var $filename;    # 文件(带路径) ; 
  20.  var $filepath; #相对路径用来删除文件; 
  21.  var $maxsize$file_type; # 允许上传文件的大小 允许上传文件的类型 ; 
  22.  
  23.  var $buildfile,$newfile,$file_width,$file_height,$rate
  24.  
  25.  function upfileclass($upfile,$upfile_name,$upfile_size){ 
  26.    $this->upfile = $upfile
  27.    $this->upfile_name = $upfile_name
  28.    $this->upfile_size = $upfile_size
  29.    $this->new_upfile_name = $this->createnewfilename($this->upfile_name); 
  30.    $this->f1 = "upfiles"
  31.    $this->f2 = $this->f1."/".date('y')."-".date('m'); 
  32.    $this->f3 = $this->f2."/".date('d'); 
  33.    $this->filename = $this->f3 . "/" . $this->new_upfile_name; 
  34.    $this->maxsize = 500*1024;    # 文件大小 500kb 
  35.    $this->file_type = "gif/jpg/jpeg/png/bmp"; # 允许上传的文件类型 
  36.  } 
  37.  
  38.  # 创建新文件名 (原文件名) 
  39.  function createnewfilename($file_name){ 
  40.     $this->fleth = explode(".",$file_name); 
  41.     $this->fileextent = $this->fleth[(int)count($this->fleth)-1]; # 获取文件后缀; 
  42.     $tmps教程tr = date('ymd').rand(0,time()) . "." .$this->fileextent;    # 创建新文件名; 
  43.     return $tmpstr
  44.  } 
  45.  
  46.  # 检测文件类型是否正确 
  47.  function chk_fileextent(){ 
  48.     $iwtrue = 0; 
  49.     $fle = explode("/",$this->file_type); 
  50.     for($i=0; $i < count($fle); $i++){ 
  51.      if($this->fileextent == $fle[$i]){ 
  52.      $iwtrue = (int) $iwtrue + 1; 
  53.      } 
  54.     } 
  55.     if$iwtrue == 0 ){ 
  56.   $this->msg("文件不符合 ".$this->file_type." 格式!"); 
  57.     } 
  58.  } 
  59.  
  60.  # 提示错误信息并终止操作 
  61.  function msg($error){ 
  62.     echo "<script language="网页特效"> "
  63.     echo " alert('".$error."'); "
  64.     echo " window.history.back(); "
  65.     echo "</script> "
  66.     die(); 
  67.  } 
  68.  
  69.  # 保存文件 
  70.  function savefile(){ 
  71.     $this->chk_fileextent(); 
  72.     $this->chk_filesize(); 
  73.     $this->createfolder( "../".$this->f1 ); 
  74.     $this->createfolder( "../".$this->f2 ); 
  75.     $this->createfolder( "../".$this->f3 ); 
  76.     return $this->chk_savefile(); 
  77.  } 
  78.  
  79.  # 检测上传结果是否成功 
  80.  function chk_savefile(){ 
  81.     $copymsg = copy($this->upfile,"../".$this->filename); 
  82.     if$copymsg ){ 
  83.    return $this->filename; 
  84.     } 
  85.     else
  86.    $this->msg("文件上传失败! 请重新上传! "); 
  87.     } 
  88.  } 
  89.  
  90.  # 创建文件夹 
  91.  function createfolder($foldername){ 
  92.     if( !is_dir($foldername) ){ 
  93.    mkdir($foldername,0777); 
  94.     } 
  95.  } 
  96.  
  97.  # 检测文件大小 
  98.  function chk_filesize(){ 
  99.     if$this->upfile_size > $this->maxsize ){ 
  100.   $this->msg("目标文件不能大于"$this->maxsize/1024 ." kb"); 
  101.     } 
  102.  } 
  103.  
  104.  # 删除文件($filepath 文件相对路径) 
  105.  function deletefile($filepath){ 
  106.     if( !is_file($filepath) ){ 
  107.    return false; 
  108.     } 
  109.     else
  110.    $ending = @unlink($filepath); 
  111.    return $ending
  112.     } 
  113.  } 
  114.  
  115.  /* 
  116.     函数:生成缩略图 
  117.   makebuild("/www.Vevb.com/a.jpg","news/b.jpg","100"); 
  118.     参数: 
  119.     echo $buildfile;   原图 带路径 
  120.     echo $newfile;    生成的缩略图 带路径 
  121.     echo $file_width;   缩略图宽度值 
  122.     echo $file_height;   缩略图高度值 (默认为宽度的比例值) 
  123.     echo $rate;     缩略图象品质; 
  124.  */ 
  125.  function makebuild($buildfile,$newfile,$file_width,$file_height=0,$rate=100) {  
  126.     if(!is_file($buildfile)){ 
  127.    $this->msg("文件 ".$buildfile." 不是一个有效的图形文件! 系统无法生成该文件的缩略图!"); 
  128.    return false; 
  129.     } 
  130.     $data = getimagesize($buildfile);  
  131.     switch($data[2]){  
  132.   case 1:  
  133.    $im = @imagecreatefromgif($buildfile);  
  134.    break
  135.   case 2:  
  136.    $im = @imagecreatefromjpeg($buildfile);  
  137.    break
  138.   case 3:  
  139.    $im = @imagecreatefrompng($buildfile);  
  140.    break
  141.     }  
  142.     if(!$im){ 
  143.    return false; 
  144.     } 
  145.     else
  146.    $srcw = imagesx($im);  # 取得原图宽度; 
  147.    $srch = imagesy($im); # 取得原图高度; 
  148.    $dstx = 0;  
  149.    $dsty = 0;  
  150.      
  151.   if($file_height==0){ 
  152.    $file_height = $file_width/$srcw*$srch
  153.   } 
  154.      
  155.   if ($srcw*$file_height>$srch*$file_width){  
  156.    $ffile_height = round($srch*$file_width/$srcw);  
  157.    $dsty = floor(($file_height-$ffile_height)/2);  
  158.    $ffile_width = $file_width;  
  159.   }  
  160.   else {  
  161.    $ffile_width = round($srcw*$file_height/$srch);  
  162.    $dstx = floor(($file_width-$ffile_width)/2);  
  163.    $ffile_height = $file_height;  
  164.   }  
  165.   $ni = imagecreatetruecolor($file_width,$file_height);  
  166.   $dstx = ($dstx<0)?0:$dstx;  
  167.   $dsty = ($dstx<0)?0:$dsty;  
  168.   $dstx = ($dstx>($file_width/2))?floor($file_width/2):$dstx;  
  169.   $dsty = ($dsty>($file_height/2))?floor($file_height/s):$dsty;  
  170.   imagecopyresized($ni,$im,$dstx,$dsty,0,0,$ffile_width,$ffile_height,$srcw,$srch);  
  171.      
  172.   imagejpeg($ni,$newfile,$rate); # 生成缩略图; 
  173.   imagedestroy($im);     # imagedestroy(resource) 释放image关联的内存 
  174.     } 
  175.  } 
  176.  
  177. ?> 
  178. //开源代码Vevb.com 
  179. </body> 
  180. </html> 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表