www.adminn.cn
站长正能量分享网!

php 上传图片自动生成缩略图

AD:阿里云服务器企业会员更优惠 腾讯云香港,韩国免备案服务器1.8折优惠

一款实现的生成小图功能的实现代码,有需要的朋友可以参考,每个都有详细的说明参数,php 上传图片自动生成缩略图实例代码如下:

  1. <form action="uploads.php" method="post" enctype="multipart/form-data"
  2.  <input type='file' name='image'><br> 
  3.  <input type='submit' name='sub' value='提交'
  4. </form> 
  5.  
  6. //uploads.php文件 
  7.  
  8. <?php  
  9. class image_upload{ 
  10.  private $srcimg;  //原图片 
  11.  private $destimg;  // 目标图片 
  12.  private $width;   //原图片的宽度 
  13.  private $height;  //原图片的高度 
  14.  private $type;   //原文件的图片类型 
  15.  private $thumb_width;  //缩略图的宽度 
  16.  private $thumb_height//缩略图的高度 
  17.  private $cut;   //是否剪切图片到指定高度 
  18.  private $tmp;   //上传图片的临时地址 
  19.  private $error
  20.  private $im;   // 创建一个临时的图片句柄 
  21.  private $new_name;  //上传文件的新名字 
  22.  //开源代码phpfensi.com 
  23.  function __construct($srcimg,$t_width,$t_height,$cut,$tmp,$error){ 
  24.   $this->srcimg=$srcimg
  25.   $this->thumb_width=$t_width
  26.   $this->thumb_height=$t_height
  27.   $this->cut=$cut
  28.   $this->tmp=$tmp
  29.   $this->error=$error
  30.   $this->get_srcimg_type(); 
  31.   $this->get_new_upload_name(); 
  32.    
  33.  
  34.    } 
  35.    
  36.  function img_upload(){ 
  37.   //文件上传的方法  
  38.   $this->check_error($this->error); 
  39.   $this->in_type(); 
  40.   $dst_dir='./images'
  41.   if(!is_dir($dst_dir)){ 
  42.    mkdir($dst_dir); 
  43.    echo "%%%<BR>"
  44.   } 
  45.    
  46.   if(is_uploaded_file($this->tmp)){ 
  47.    if(move_uploaded_file($this->tmp, $this->new_name)){ 
  48.     echo "文件上传成功<br>"
  49.     return true; 
  50.    }else
  51.     echo '文件不能被移动,上传失败'
  52.     exit
  53.    } 
  54.   }else
  55.     echo '文件上传可能被攻击'
  56.     exit
  57.   } 
  58.    
  59.  } 
  60.   
  61.  function make_thumbnail(){ 
  62.   //生成缩略图的方法 
  63.   $this->get_dest_imgpath(); 
  64.   $this->make_im(); 
  65.   $this->width=imagesx($this->im); 
  66.   $this->height=imagesy($this->im); 
  67.    
  68.   $thumb_ratio=$this->thumb_width/$this->thumb_height; 
  69.   $ratio=$this->width/$this->height; 
  70.    
  71.    
  72.   if($this->cut==1){  //是否裁剪 
  73.     if($ratio>=$thumb_ratio){ 
  74.      $img=imagecreatetruecolor($this->thumb_width, $this->thumb_height); 
  75.      imagecopyresampled($img$this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->height*$thumb_ratio$this->height); 
  76.      imagejpeg($img,$this->destimg);        
  77.      echo "缩略图生成成功"
  78.     }else
  79.      $img=imagecreatetruecolor($this->thumb_width, $this->thumb_height); 
  80.      imagecopyresampled($img$this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->width, $this->width/$thumb_ratio); 
  81.      imagejpeg($img,$this->destimg);        
  82.      echo "缩略图生成成功";   
  83.     } 
  84.   }else
  85.    if($ratio>=$thumb_ratio){ 
  86.      $img=imagecreatetruecolor($this->thumb_height*$thumb_ratio$this->thumb_height); 
  87.      imagecopyresampled($img$this->im, 0, 0, 0, 0, $this->thumb_height*$thumb_ratio$this->thumb_height, $this->width, $this->height); 
  88.      imagejpeg($img,$this->destimg);        
  89.      echo "缩略图生成成功"
  90.    }else
  91.      $img=imagecreatetruecolor($this->thumb_width, $this->thumb_width/$thumb_ratio); 
  92.      imagecopyresampled($img$this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_width/$thumb_ratio$this->width, $this->height); 
  93.      imagejpeg($img,$this->destimg);        
  94.      echo "缩略图生成成功"
  95.    } 
  96.   } 
  97.   imagedestroy($this->im); 
  98.   imagedestroy($img); 
  99.  } 
  100.   
  101.  private function check_error($error){ 
  102.   //检查文件上传传得错误; 
  103.   if($error>0){ 
  104.    switch($error){ 
  105.     case 1: 
  106.      echo "上传文件的大小超过了PHP.INI文件中得配置<br>"
  107.      break
  108.     case 2: 
  109.      echo "上传文件的大小超过了表单中的限制大小<br>"
  110.      break
  111.     case 3: 
  112.      echo "只有部分文件被上传<br>"
  113.      break
  114.     case 4: 
  115.      echo "没有文件被上传<br>"
  116.      break
  117.     case 6: 
  118.      echo "php.ini中没有设置图片存放的临时未知<br>"
  119.      break
  120.     case 7: 
  121.      echo "硬盘不可以写入,上传失败<br>"
  122.      break
  123.     default
  124.      echo "未知错误"
  125.      break
  126.    } 
  127.   } 
  128.  } 
  129.   
  130.  private function get_srcimg_type(){ 
  131.   //判断源文件的图片类型 
  132.   $this->type=substr(strrchr($this->srcimg, '.'),'1'); 
  133.  } 
  134.   
  135.  private function in_type(){ 
  136.   //检查文件是否符合类型 
  137.   $type_arr=array('gif','jpg','png'); 
  138.   if(!in_array($this->type, $type_arr)){ 
  139.    echo "只支持PNG,GIF,JPG 三种类型的文件格式……,请重新上传正确的格式"
  140.    exit
  141.   } 
  142.  } 
  143.   
  144.  private function get_new_upload_name(){ 
  145.   //上传的文件生成新的名字 
  146.   $this->new_name='images/'.date('YmdHis').'.'.$this->type; 
  147.   
  148.  } 
  149.  private function make_im(){ 
  150.   //从原文件新建一幅图像 
  151.   switch($this->type){ 
  152.    case 'jpg'
  153.     $this->im=imagecreatefromjpeg($this->new_name); 
  154.     break
  155.    case 'gif'
  156.     $this->im=imagecreatefromgif($this->new_name); 
  157.     break
  158.    case 'png'
  159.     $this->im=imagecreatefrompng($this->new_name); 
  160.     break
  161.    }  
  162.  } 
  163.  private function  get_dest_imgpath(){ 
  164.   //得到缩略图的存储路径 
  165.   $len1=strlen($this->new_name); 
  166.   $len2=strlen(strrchr($this->new_name,'.')); 
  167.   $len3=$len1$len2
  168.   $this->destimg=substr($this->new_name,0,$len3).'_small.'.$this->type; 
  169.  } 
  170.   
  171.  print_r($_FILES); 
  172.  $file=$_FILES['image']; 
  173. echo $file['name']; 
  174.  $uploads=new image_upload($file['name'], 120, 160, 1,  $file['tmp_name'],$file['error'] ); 
  175.   if($uploads->img_upload()){ 
  176.    $uploads->make_thumbnail(); 
  177.   } 
  178.   
  179. ?> 

模板优惠价: (点击购买)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《php 上传图片自动生成缩略图》
文章链接:https://www.adminn.cn/news/8027.html
本站资源模板仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。2021.5月起,网站调整,暂不再分享免费模板。谢谢理解

Adminn.Cn 站长分享圈

帝国CMS精品模板腾讯云优惠券,代金券

2次开发,学习研究使用!扫码支付后联系QQ677123发货!

支付宝扫一扫打赏