php SWFUpload 怎么创建缩略图并且保存到指定文件夹里面

upload.php

  1. <?php
  2. /*
  3.  * swfupload图片上传  
  4.  */ 
  5.     if (isset($_POST["PHPSESSID"])) {
  6.         session_id($_POST["PHPSESSID"]);
  7.     }
  8.     session_start();
  9.     ini_set("html_errors", "0");
  10.     if (!isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) ||$_FILES["Filedata"]["error"] != 0) {
  11.         echo "错误:无效的上传!";
  12.         exit(0);
  13.     }

  14.     // Get the image and create a thumbnail
  15.      $file_types=explode(".",$_FILES["Filedata"]["name"]);
  16.      $file_type=$file_types[count($file_types)-1];
  17.     if(strtolower($file_type)=='gif' )
  18.     {
  19.         $img = imagecreatefromgif($_FILES["Filedata"]["tmp_name"]);
  20.     }
  21.     else if(strtolower($file_type)=='png')
  22.     {
  23.         $img = imagecreatefrompng($_FILES["Filedata"]["tmp_name"]);
  24.     }
  25.     else if(strtolower($file_type)=='bmp')
  26.     {
  27.         $img = imagecreatefromwbmp($_FILES["Filedata"]["tmp_name"]);
  28.     }
  29.     else
  30.     {
  31.         $img = imagecreatefromjpeg($_FILES["Filedata"]["tmp_name"]);
  32.     }

  33.     if (!$img) {
  34.         echo "错误:无法创建图像 ". $_FILES["Filedata"]["tmp_name"];
  35.         exit(0);
  36.     }

  37.     $width = imageSX($img);
  38.     $height = imageSY($img);

  39.     if (!$width || !$height) {
  40.         echo "错误:无效的高或高";
  41.         exit(0);
  42.     }

  43.     // Build the thumbnail
  44.     $target_width = 100;
  45.     $target_height = 100;
  46.     $target_ratio = $target_width / $target_height;

  47.     $img_ratio = $width / $height;

  48.     if ($target_ratio > $img_ratio) {
  49.         $new_height = $target_height;
  50.         $new_width = $img_ratio * $target_height;
  51.     } else {
  52.         $new_height = $target_width / $img_ratio;
  53.         $new_width = $target_width;
  54.     }

  55.     if ($new_height > $target_height) {
  56.         $new_height = $target_height;
  57.     }
  58.     if ($new_width > $target_width) {
  59.         $new_height = $target_width;
  60.     }

  61.     $new_img = ImageCreateTrueColor(100, 100);
  62.     if (!@imagefilledrectangle($new_img, 0, 0, $target_width-1, $target_height-1, 0)) { // Fill the image black
  63.         echo "错误:不能填充新图片";
  64.         exit(0);
  65.     }

  66.     if (!@imagecopyresampled($new_img, $img, ($target_width-$new_width)/2, ($target_height-$new_height)/2, 0,0, $new_width, $new_height, $width, $height)) {
  67.         echo "错误:不能调整大小的图像";
  68.         exit(0);
  69.     }

  70.     if (!isset($_SESSION["file_info"])) {
  71.         $_SESSION["file_info"] = array();
  72.     }
  73.     ob_start();
  74.     imagejpeg($new_img);
  75.     $imagevariable = ob_get_contents();
  76.     ob_end_clean();

  77.     $file_id = md5($_FILES["Filedata"]["tmp_name"] + rand()*100000);

  78.     $_SESSION["file_info"][$file_id] = $imagevariable;
  79.     echo "FILEID:" . $file_id;  // Return the file id to the script
  80.     include("upimg.class.php");
  81.     if(!empty($_FILES["Filedata"]) and count(explode(",",$_SESSION["upload_tem"]))<5)
  82.     {
  83.         $folder="upload/images/tem/".date("Y-m-d");
  84.         $up = new upimg("$folder","$folder"); //可以写成:$up = new upimg();
  85.         $up->autoThumb = TRUE; //可省略
  86.         $up->srcDel=TRUE;
  87.         $up->thumbWidth = 550; //可省略
  88.         $up->thumbHeight = 400; //可省略
  89.         $up->maxsize=2014; //上传文件大小单位是kb
  90.         $result= $up->upload('Filedata'); // HTML中<input />的name属性值
  91.         $_SESSION["upload_tem"]=$_SESSION["upload_tem"].",".$up->thumbPath;
  92.         $_SESSION["upload_tem"]=trim($_SESSION["upload_tem"],",");

  93.     }

  94. ?>
生成缩略图类upimg.class.php:

  1. <?php
  2. class upimg{
  3.     public $uploadFolder = 'upload'; // 图片存放目录
  4.     public $thumbFolder = 'upload/thumb'; // 缩略图存放目录
  5.     public $thumbWidth = ''; // 缩略图宽度
  6.     public $thumbHeight = ''; // 缩略图高度
  7.     public $autoThumb = ''; // 是否自动生成缩略图
  8.     public $error = ''; // 错误信息
  9.     public $imgPath = ''; // 上传成功后的图片位置
  10.     public $thumbPath = ''; // 上传成功后的缩略图位置
  11.     public $maxsize='';

  12.     // 说明:初始化,创建存放目录
  13.     function __construct($uploadFolder = 'upload', $thumbFolder = 'upload/thumb'){
  14.         $this->uploadFolder = $uploadFolder;
  15.         $this->thumbFolder = $thumbFolder;
  16.         $this->_mkdir();
  17.     }

  18.     // 说明:上传图片,参数是<input />的name属性值;成功返回图片的相对URL,失败返回FALSE和错误信息(在$this->error里)
  19.     // bool/sting upload(string $html_tags_input_attrib_name);
  20.     function upload($inputName){ // 上传操作,参数是input标签的name属性。
  21.         if ($this->error){ // 如果有错,直接返回(例如_mkdir)
  22.             return FALSE;
  23.         }
  24.         if(!$_FILES[$inputName]["name"]){
  25.             $this->error = '没有上传图片';
  26.             return FALSE;
  27.         }
  28.         //检测文件大小
  29.         if($_FILES[$inputName]["size"] > ($this->maxsize*1024)){
  30.             $this->error = '上传文件'.$inputName.'太大,最大支持'.ceil($this->maxsize/1024).'kb的文件';
  31.             return FALSE;
  32.         }
  33.         if($_FILES[$inputName]["name"]){
  34.             $isUpFile = $_FILES[$inputName]['tmp_name'];
  35.             if (is_uploaded_file($isUpFile)){
  36.                 $imgInfo = $this->_getinfo($isUpFile);
  37.                 if (FALSE == $imgInfo){
  38.                     return FALSE;
  39.                 }
  40.                 $extName = $imgInfo['type'];
  41.                 $microSenond = floor(microtime()*10000);// 取一个毫秒级数字,4位。
  42.                 $newFileName = $uploadFolder . '/' . date('YmdHis') . $microSenond . '.' . $extName ; // 所上传图片的新名字。
  43.                 $location = $this->uploadFolder . $newFileName;
  44.                 $result = move_uploaded_file($isUpFile, $location);
  45.                 if ($result)
  46.                 {
  47.                     if (TRUE == $this->autoThumb)
  48.                         { // 是否生成缩略图
  49.                              $thumb = $this->thumb($location, $this->thumbWidth, $this->thumbHeight);
  50.                             if (FALSE == $thumb)
  51.                             {
  52.                                 return FALSE;
  53.                             }                       
  54.                         }
  55.                     //是否删除原图
  56.                     if(TRUE==$this->srcDel)
  57.                     {
  58.                         @unlink ($location);
  59.                     }
  60.                     $this->imgPath = $location;
  61.                     return $location;
  62.                 }else{
  63.                     $this->error = '移动临时文件时出错';
  64.                     return FALSE;
  65.                 }
  66.             }else{
  67.                 $uploadError = $_FILES[$inputName]['error'];
  68.                 if (1 == $uploadError){ // 文件大小超过了php.ini中的upload_max_filesize
  69.                     $this->error = '文件太大,服务器拒绝接收大于' . ini_get('upload_max_filesize') . '的文件';
  70.                     return FALSE;
  71.                 }elseif (3 == $uploadError){ // 上传了部分文件
  72.                     $this->error = '上传中断,请重试';
  73.                     return FALSE;
  74.                 }elseif (4 == $uploadError){
  75.                     $this->error = '没有文件被上传';
  76.                     return FALSE;
  77.                 }elseif (6 == $uploadError){
  78.                     $this->error = '找不到临时文件夹,请联系您的服务器管理员';
  79.                     return FALSE;
  80.                 }elseif (7 == $uploadError){
  81.                     $this->error = '文件写入失败,请联系您的服务器管理员';
  82.                     return FALSE;
  83.                 }else{
  84.                     if (0 != $uploadError){
  85.                         $this->error = '未知上传错误,请联系您的服务器管理员';
  86.                         return FALSE;
  87.                     }
  88.                 } // end if $uploadError
  89.             } // end if is_uploaded_file else
  90.         } // end if $_FILES[$inputName]["name"]
  91.     }

  92.     // 说明:获取图片信息,参数是上传后的临时文件,成功返回数组,失败返回FALSE和错误信息
  93.     // array/bool _getinfo(string $upload_tmp_file)
  94.     private function _getinfo($img){
  95.         if (!file_exists($img)){
  96.             $this->error = '找不到图片,无法获取其信息';
  97.             return FALSE;
  98.         }
  99.         $tempFile = @fopen($img, "rb");
  100.         $bin = @fread($tempFile, 2); //只读2字节
  101.         @fclose($tempFile);
  102.         $strInfo = @unpack("C2chars", $bin);
  103.         $typeCode = intval($strInfo['chars1'] . $strInfo['chars2']);
  104.         $fileType = '';
  105.         switch ($typeCode){ // 6677:bmp 255216:jpg 7173:gif 13780:png 7790:exe 8297:rar 8075:zip tar:109121 7z:55122 gz 31139
  106.             case '255216':
  107.                 $fileType = 'jpg';
  108.                 break;
  109.             case '6677':
  110.                 $fileType = 'bmp';
  111.                 break;
  112.             case '7173':
  113.                 $fileType = 'gif';
  114.                 break;
  115.             case '13780':
  116.                 $fileType = 'png';
  117.                 break;
  118.             default:
  119.                 $fileType = 'unknown';
  120.         }
  121.         if ($fileType == 'jpg' || $fileType == 'gif' || $fileType == 'png' || $fileType == 'bmp'){
  122.             $imageInfo = getimagesize($img);
  123.             $imgInfo['size'] = $imageInfo['bits'];
  124.             $imgInfo["type"] = $fileType;
  125.             $imgInfo["width"] = $imageInfo[0];
  126.             $imgInfo["height"] = $imageInfo[1];
  127.             return $imgInfo;
  128.         }else{ // 非图片类文件信息
  129.             $this->error = '图片类型错误';
  130.             return FALSE;
  131.         }
  132.     } // end _getinfo

  133.    // 说明:生成缩略图,等比例缩放或拉伸
  134.     // bool/string thumb(string $uploaded_file, int $thumbWidth, int $thumbHeight, string $thumbTail);
  135.     function thumb($img, $thumbWidth = 300, $thumbHeight = 200,$thumbTail = '_thumb')
  136.     {
  137.         $filename = $img; // 保留一个名字供新的缩略图名字使用
  138.         $imgInfo = $this->_getinfo($img,$i);
  139.         if(FALSE == $imgInfo)
  140.         {
  141.             return FALSE;
  142.         }
  143.         $imgType = $imgInfo['type'];
  144.         switch ($imgType)
  145.         { // 创建一个图,并给出扩展名
  146.             case "jpg" :
  147.                 $img = imagecreatefromjpeg($img);
  148.                 $extName = 'jpg';
  149.                 break;
  150.             case 'gif' :
  151.                 $img = imagecreatefromgif($img);
  152.                 $extName = 'gif';
  153.                 break;
  154.             case 'bmp' :
  155.                 $img = imagecreatefromgif($img);
  156.                 $extName = 'bmp';
  157.                 break;
  158.             case 'png' :
  159.                 $img = imagecreatefrompng($img);
  160.                 $extName = 'png';
  161.                 break;
  162.             default : // 如果类型错误,生成一张空白图
  163.                 $img = imagecreate($thumbWidth,$thumbHeight);
  164.                 imagecolorallocate($img,0x00,0x00,0x00);
  165.                 $extName = 'jpg';
  166.         }
  167.         // 缩放后的图片尺寸(小则拉伸,大就缩放)
  168.         $imgWidth = $imgInfo['width'];
  169.         $imgHeight = $imgInfo['height'];
  170.         if($imgHeight > $imgWidth)
  171.         { // 竖图
  172.             $newHeight = $thumbHeight;
  173.             $newWidth = ceil($imgWidth / ($imgHeight / $thumbHeight ));
  174.         }
  175.         else if($imgHeight < $imgWidth)
  176.         { // 横图
  177.             $newHeight = ceil($imgHeight / ($imgWidth / $thumbWidth ));
  178.             $newWidth = $thumbWidth;
  179.         }
  180.         else if($imgHeight == $imgWidth)
  181.         { // 等比例图
  182.             $newHeight = $thumbWidth;
  183.             $newWidth = $thumbWidth;
  184.         }
  185.         $bgimg = imagecreatetruecolor($newWidth,$newHeight);
  186.         $bg = imagecolorallocate($bgimg,0x00,0x00,0x00);
  187.         imagefill($bgimg,0,0,$bg);
  188.         $sampled = imagecopyresampled($bgimg,$img,0,0,0,0,$newWidth,$newHeight,$imgWidth,$imgHeight);
  189.         if(!$sampled )
  190.         {
  191.             $this->error = '缩略图生成失败';
  192.             $this->path=$this->uploadFolder . '/' . $filename;
  193.             return FALSE;
  194.         }
  195.         $filename = basename($filename);
  196.         $newFileName = substr($filename, 0, strrpos($filename, ".")) . $thumbTail . '.' . $extName ; // 新名字
  197.         $thumbPath = $this->thumbFolder . '/' . $newFileName;
  198.         switch ($extName){
  199.             case 'jpg':
  200.                 $result = imagejpeg($bgimg, $thumbPath);
  201.                 break;
  202.             case 'gif':
  203.                 $result = imagegif($bgimg, $thumbPath);
  204.                 break;
  205.             case 'png':
  206.                 $result = imagepng($bgimg, $thumbPath);
  207.                 break;
  208.             default: // 上边判断类型出错时会创建一张空白图,并给出扩展名为jpg
  209.                 $result = imagejpeg($bgimg, $thumbPath);
  210.         }
  211.         if ($result)
  212.         {
  213.             $this->thumbPath = $thumbPath;
  214.             $this->path=$this->uploadFolder . '/' . $filename;
  215.             return $thumbPath;
  216.         }
  217.         else
  218.         {
  219.             $this->error = '缩略图创建失败';
  220.             $this->path=$this->uploadFolder . '/' . $filename;
  221.             return FALSE;
  222.         }
  223.     } // end thumb

  224.    // 说明:创建图片的存放目录
  225.     private function _mkdir()
  226.     { // 创建图片上传目录和缩略图目录
  227.         if(!is_dir($this->uploadFolder))
  228.         {
  229.             $dir = explode('/', $this->uploadFolder);
  230.             foreach($dir as $v)
  231.             {
  232.                 if($v)
  233.                 {
  234.                     $d .= $v . '/';
  235.                     if(!is_dir($d))
  236.                     {
  237.                         $state = mkdir($d);
  238.                         if(!$state)
  239.                         {
  240.                             $this->error = '在创建目录' . $d . '时出错!';
  241.                         }
  242.                             
  243.                     }
  244.                 }
  245.             }
  246.         }
  247.         if(!is_dir($this->thumbFolder) && TRUE == $this->autoThumb)
  248.         {   
  249.             $dir = explode('/', $this->thumbFolder);
  250.             foreach($dir as $v)
  251.             {
  252.                 if($v)
  253.                 {
  254.                     $d .= $v . '/';
  255.                     if(!is_dir($d))
  256.                     {
  257.                         $state = mkdir($d);
  258.                         if(!$state)
  259.                         {
  260.                             $this->error = '在创建目录' . $d . '时出错!';
  261.                         }
  262.                             
  263.                     }
  264.                 }
  265.             }
  266.         }
  267.     }
  268. }
  269. ?>

你可能感兴趣的:(缩略图,swfload,swfload)