程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php 上傳圖片自動生成縮略圖

php 上傳圖片自動生成縮略圖

編輯:關於PHP編程

一款實現的生成小圖功能的實現代碼,有需要的朋友可以參考,每個都有詳細的說明參數。  代碼如下 復制代碼

<form action="uploads.php" method="post" enctype="multipart/form-data">
 <input type='file' name='image'><br>
 <input type='submit' name='sub' value='提交'>
</form>

uploads.php文件

<?php
class image_upload{
 private $srcimg;  //原圖片
 private $destimg;  // 目標圖片
 private $width;   //原圖片的寬度
 private $height;  //原圖片的高度
 private $type;   //原文件的圖片類型
 private $thumb_width;  //縮略圖的寬度
 private $thumb_height; //縮略圖的高度
 private $cut;   //是否剪切圖片到指定高度
 private $tmp;   //上傳圖片的臨時地址
 private $error;
 private $im;   // 創建一個臨時的圖片句柄
 private $new_name;  //上傳文件的新名字
 
 function __construct($srcimg,$t_width,$t_height,$cut,$tmp,$error){
  $this->srcimg=$srcimg;
  $this->thumb_width=$t_width;
  $this->thumb_height=$t_height;
  $this->cut=$cut;
  $this->tmp=$tmp;
  $this->error=$error;
  $this->get_srcimg_type();
  $this->get_new_upload_name();
  

   }
  
 function img_upload(){
  //文件上傳的方法 
  $this->check_error($this->error);
  $this->in_type();
  $dst_dir='./images';
  if(!is_dir($dst_dir)){
   mkdir($dst_dir);
   echo "%%%<BR>";
  }
  
  if(is_uploaded_file($this->tmp)){
   if(move_uploaded_file($this->tmp, $this->new_name)){
    echo "文件上傳成功<br>";
    return true;
   }else{
    echo '文件不能被移動,上傳失敗';
    exit;
   }
  }else{
    echo '文件上傳可能被攻擊';
    exit;
  }
  
 }
 
 function make_thumbnail(){
  //生成縮略圖的方法
  $this->get_dest_imgpath();
  $this->make_im();
  $this->width=imagesx($this->im);
  $this->height=imagesy($this->im);
  
  $thumb_ratio=$this->thumb_width/$this->thumb_height;
  $ratio=$this->width/$this->height;
  
  
  if($this->cut==1){  //是否裁剪
    if($ratio>=$thumb_ratio){
     $img=imagecreatetruecolor($this->thumb_width, $this->thumb_height);
     imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->height*$thumb_ratio, $this->height);
     imagejpeg($img,$this->destimg);       
     echo "縮略圖生成成功";
    }else{
     $img=imagecreatetruecolor($this->thumb_width, $this->thumb_height);
     imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->width, $this->width/$thumb_ratio);
     imagejpeg($img,$this->destimg);       
     echo "縮略圖生成成功";  
    }
  }else{
   if($ratio>=$thumb_ratio){
     $img=imagecreatetruecolor($this->thumb_height*$thumb_ratio, $this->thumb_height);
     imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_height*$thumb_ratio, $this->thumb_height, $this->width, $this->height);
     imagejpeg($img,$this->destimg);       
     echo "縮略圖生成成功";
   }else{
     $img=imagecreatetruecolor($this->thumb_width, $this->thumb_width/$thumb_ratio);
     imagecopyresampled($img, $this->im, 0, 0, 0, 0, $this->thumb_width, $this->thumb_width/$thumb_ratio, $this->width, $this->height);
     imagejpeg($img,$this->destimg);       
     echo "縮略圖生成成功";
   }
  }
  imagedestroy($this->im);
  imagedestroy($img);
 }
 
 private function check_error($error){
  //檢查文件上傳傳得錯誤;
  if($error>0){
   switch($error){
    case 1:
     echo "上傳文件的大小超過了PHP.INI文件中得配置<br>";
     break;
    case 2:
     echo "上傳文件的大小超過了表單中的限制大小<br>";
     break;
    case 3:
     echo "只有部分文件被上傳<br>";
     break;
    case 4:
     echo "沒有文件被上傳<br>";
     break;
    case 6:
     echo "php.ini中沒有設置圖片存放的臨時未知<br>";
     break;
    case 7:
     echo "硬盤不可以寫入,上傳失敗<br>";
     break;
    default:
     echo "未知錯誤";
     break;
   }
  }
 }
 
 private function get_srcimg_type(){
  //判斷源文件的圖片類型
  $this->type=substr(strrchr($this->srcimg, '.'),'1');
 }
 
 private function in_type(){
  //檢查文件是否符合類型
  $type_arr=array('gif','jpg','png');
  if(!in_array($this->type, $type_arr)){
   echo "只支持PNG,GIF,JPG 三種類型的文件格式……,請重新上傳正確的格式";
   exit;
  }
 }
 
 private function get_new_upload_name(){
  //上傳的文件生成新的名字
  $this->new_name='images/'.date('YmdHis').'.'.$this->type;
 
 }
 private function make_im(){
  //從原文件新建一幅圖像
  switch($this->type){
   case 'jpg':
    $this->im=imagecreatefromjpeg($this->new_name);
    break;
   case 'gif':
    $this->im=imagecreatefromgif($this->new_name);
    break;
   case 'png':
    $this->im=imagecreatefrompng($this->new_name);
    break;
   } 
 }
 private function  get_dest_imgpath(){
  //得到縮略圖的存儲路徑
  $len1=strlen($this->new_name);
  $len2=strlen(strrchr($this->new_name,'.'));
  $len3=$len1-$len2;
  $this->destimg=substr($this->new_name,0,$len3).'_small.'.$this->type;
 }
 
}
 print_r($_FILES);
 $file=$_FILES['image'];
echo $file['name'];
 $uploads=new image_upload($file['name'], 120, 160, 1,  $file['tmp_name'],$file['error'] );
  if($uploads->img_upload()){
   $uploads->make_thumbnail();
  }
 
?>


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved