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

前端开发 前端开发 主题:1148 回复:2395

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

泛泛之交 发布于 2017-03-15 字数 33 浏览 956 回复 1

求大神解决 最好是给下代码

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(1

归属感 2017-05-13 1 楼

一下是网友提供的部分代码,仅供参考:
upload.php:

<?php
/*

  • swfupload图片上传
    */
    if (isset($_POST["PHPSESSID"])) {
    session_id($_POST["PHPSESSID"]);
    }
    session_start();
    ini_set("html_errors", "0");
    if (!isset($_FILES["Filedata"]) || !is_uploaded_file($_FILES["Filedata"]["tmp_name"]) || $_FILES["Filedata"]["error"] != 0) {
    echo "错误:无效的上传!";
    exit(0);
    }

    // Get the image and create a thumbnail
    $file_types=explode(".",$_FILES["Filedata"]["name"]);
    $file_type=$file_types[count($file_types)-1];
    if(strtolower($file_type)=='gif' )
    {
    $img = imagecreatefromgif($_FILES["Filedata"]["tmp_name"]);
    }
    else if(strtolower($file_type)=='png')
    {
    $img = imagecreatefrompng($_FILES["Filedata"]["tmp_name"]);
    }
    else if(strtolower($file_type)=='bmp')
    {
    $img = imagecreatefromwbmp($_FILES["Filedata"]["tmp_name"]);
    }
    else
    {
    $img = imagecreatefromjpeg($_FILES["Filedata"]["tmp_name"]);
    }

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

    $width = imageSX($img);
    $height = imageSY($img);

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

    // Build the thumbnail
    $target_width = 100;
    $target_height = 100;
    $target_ratio = $target_width / $target_height;

    $img_ratio = $width / $height;

    if ($target_ratio > $img_ratio) {
    $new_height = $target_height;
    $new_width = $img_ratio * $target_height;
    } else {
    $new_height = $target_width / $img_ratio;
    $new_width = $target_width;
    }

    if ($new_height > $target_height) {
    $new_height = $target_height;
    }
    if ($new_width > $target_width) {
    $new_height = $target_width;
    }

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

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

    if (!isset($_SESSION["file_info"])) {
    $_SESSION["file_info"] = array();
    }
    ob_start();
    imagejpeg($new_img);
    $imagevariable = ob_get_contents();
    ob_end_clean();

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

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

    }

?>

生成缩略图类upimg.class.php:

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

// 说明:初始化,创建存放目录
function __construct($uploadFolder = 'upload', $thumbFolder = 'upload/thumb'){
    $this-&gt;uploadFolder = $uploadFolder;
    $this-&gt;thumbFolder = $thumbFolder;
    $this-&gt;_mkdir();
}

// 说明:上传图片,参数是&lt;input /&gt;的name属性值;成功返回图片的相对URL,失败返回FALSE和错误信息(在$this-&gt;error里)
// bool/sting upload(string $html_tags_input_attrib_name);
function upload($inputName){ // 上传操作,参数是input标签的name属性。
    if ($this-&gt;error){ // 如果有错,直接返回(例如_mkdir)
        return FALSE;
    }
    if(!$_FILES[$inputName]["name"]){
        $this-&gt;error = '没有上传图片';
        return FALSE;
    }
    //检测文件大小
    if($_FILES[$inputName]["size"] &gt; ($this-&gt;maxsize*1024)){
        $this-&gt;error = '上传文件'.$inputName.'太大,最大支持'.ceil($this-&gt;maxsize/1024).'kb的文件';
        return FALSE;
    }
    if($_FILES[$inputName]["name"]){
        $isUpFile = $_FILES[$inputName]['tmp_name'];
        if (is_uploaded_file($isUpFile)){
            $imgInfo = $this-&gt;_getinfo($isUpFile);
            if (FALSE == $imgInfo){
                return FALSE;
            }
            $extName = $imgInfo['type'];
            $microSenond = floor(microtime()*10000);// 取一个毫秒级数字,4位。
            $newFileName = $uploadFolder . '/' . date('YmdHis') . $microSenond . '.' . $extName ; // 所上传图片的新名字。
            $location = $this-&gt;uploadFolder . $newFileName;
            $result = move_uploaded_file($isUpFile, $location);
            if ($result)
            {
                if (TRUE == $this-&gt;autoThumb)
                    { // 是否生成缩略图
                         $thumb = $this-&gt;thumb($location, $this-&gt;thumbWidth, $this-&gt;thumbHeight);
                        if (FALSE == $thumb)
                        {
                            return FALSE;
                        }                       
                    }
                //是否删除原图
                if(TRUE==$this-&gt;srcDel)
                {
                    @unlink($location);
                }
                $this-&gt;imgPath = $location;
                return $location;
            }else{
                $this-&gt;error = '移动临时文件时出错';
                return FALSE;
            }
        }else{
            $uploadError = $_FILES[$inputName]['error'];
            if (1 == $uploadError){ // 文件大小超过了php.ini中的upload_max_filesize
                $this-&gt;error = '文件太大,服务器拒绝接收大于' . ini_get('upload_max_filesize') . '的文件';
                return FALSE;
            }elseif (3 == $uploadError){ // 上传了部分文件
                $this-&gt;error = '上传中断,请重试';
                return FALSE;
            }elseif (4 == $uploadError){
                $this-&gt;error = '没有文件被上传';
                return FALSE;
            }elseif (6 == $uploadError){
                $this-&gt;error = '找不到临时文件夹,请联系您的服务器管理员';
                return FALSE;
            }elseif (7 == $uploadError){
                $this-&gt;error = '文件写入失败,请联系您的服务器管理员';
                return FALSE;
            }else{
                if (0 != $uploadError){
                    $this-&gt;error = '未知上传错误,请联系您的服务器管理员';
                    return FALSE;
                }
            } // end if $uploadError
        } // end if is_uploaded_file else
    } // end if $_FILES[$inputName]["name"]
}

// 说明:获取图片信息,参数是上传后的临时文件,成功返回数组,失败返回FALSE和错误信息
// array/bool _getinfo(string $upload_tmp_file)
private function _getinfo($img){
    if (!file_exists($img)){
        $this-&gt;error = '找不到图片,无法获取其信息';
        return FALSE;
    }
    $tempFile = @fopen($img, "rb");
    $bin = @fread($tempFile, 2); //只读2字节
    @fclose($tempFile);
    $strInfo = @unpack("C2chars", $bin);
    $typeCode = intval($strInfo['chars1'] . $strInfo['chars2']);
    $fileType = '';
    switch ($typeCode){ // 6677:bmp 255216:jpg 7173:gif 13780:png 7790:exe 8297:rar 8075:zip tar:109121 7z:55122 gz 31139
        case '255216':
            $fileType = 'jpg';
            break;
        case '6677':
            $fileType = 'bmp';
            break;
        case '7173':
            $fileType = 'gif';
            break;
        case '13780':
            $fileType = 'png';
            break;
        default:
            $fileType = 'unknown';
    }
    if ($fileType == 'jpg' || $fileType == 'gif' || $fileType == 'png' || $fileType == 'bmp'){
        $imageInfo = getimagesize($img);
        $imgInfo['size'] = $imageInfo['bits'];
        $imgInfo["type"] = $fileType;
        $imgInfo["width"] = $imageInfo[0];
        $imgInfo["height"] = $imageInfo[1];
        return $imgInfo;
    }else{ // 非图片类文件信息
        $this-&gt;error = '图片类型错误';
        return FALSE;
    }
} // end _getinfo

// 说明:生成缩略图,等比例缩放或拉伸
// bool/string thumb(string $uploaded_file, int $thumbWidth, int $thumbHeight, string $thumbTail);
function thumb($img, $thumbWidth = 300, $thumbHeight = 200,$thumbTail = '_thumb')
{
$filename = $img; // 保留一个名字供新的缩略图名字使用
$imgInfo = $this->_getinfo($img,$i);
if(FALSE == $imgInfo)
{
return FALSE;
}
$imgType = $imgInfo['type'];
switch ($imgType)
{ // 创建一个图,并给出扩展名
case "jpg" :
$img = imagecreatefromjpeg($img);
$extName = 'jpg';
break;
case 'gif' :
$img = imagecreatefromgif($img);
$extName = 'gif';
break;
case 'bmp' :
$img = imagecreatefromgif($img);
$extName = 'bmp';
break;
case 'png' :
$img = imagecreatefrompng($img);
$extName = 'png';
break;
default : // 如果类型错误,生成一张空白图
$img = imagecreate($thumbWidth,$thumbHeight);
imagecolorallocate($img,0x00,0x00,0x00);
$extName = 'jpg';
}
// 缩放后的图片尺寸(小则拉伸,大就缩放)
$imgWidth = $imgInfo['width'];
$imgHeight = $imgInfo['height'];
if($imgHeight > $imgWidth)
{ // 竖图
$newHeight = $thumbHeight;
$newWidth = ceil($imgWidth / ($imgHeight / $thumbHeight ));
}
else if($imgHeight < $imgWidth)
{ // 横图
$newHeight = ceil($imgHeight / ($imgWidth / $thumbWidth ));
$newWidth = $thumbWidth;
}
else if($imgHeight == $imgWidth)
{ // 等比例图
$newHeight = $thumbWidth;
$newWidth = $thumbWidth;
}
$bgimg = imagecreatetruecolor($newWidth,$newHeight);
$bg = imagecolorallocate($bgimg,0x00,0x00,0x00);
imagefill($bgimg,0,0,$bg);
$sampled = imagecopyresampled($bgimg,$img,0,0,0,0,$newWidth,$newHeight,$imgWidth,$imgHeight);
if(!$sampled )
{
$this->error = '缩略图生成失败';
$this->path=$this->uploadFolder . '/' . $filename;
return FALSE;
}
$filename = basename($filename);
$newFileName = substr($filename, 0, strrpos($filename, ".")) . $thumbTail . '.' . $extName ; // 新名字
$thumbPath = $this->thumbFolder . '/' . $newFileName;
switch ($extName){
case 'jpg':
$result = imagejpeg($bgimg, $thumbPath);
break;
case 'gif':
$result = imagegif($bgimg, $thumbPath);
break;
case 'png':
$result = imagepng($bgimg, $thumbPath);
break;
default: // 上边判断类型出错时会创建一张空白图,并给出扩展名为jpg
$result = imagejpeg($bgimg, $thumbPath);
}
if ($result)
{
$this->thumbPath = $thumbPath;
$this->path=$this->uploadFolder . '/' . $filename;
return $thumbPath;
}
else
{
$this->error = '缩略图创建失败';
$this->path=$this->uploadFolder . '/' . $filename;
return FALSE;
}
} // end thumb

// 说明:创建图片的存放目录
private function _mkdir()
{ // 创建图片上传目录和缩略图目录
if(!is_dir($this->uploadFolder))
{
$dir = explode('/', $this->uploadFolder);
foreach($dir as $v)
{
if($v)
{
$d .= $v . '/';
if(!is_dir($d))
{
$state = mkdir($d);
if(!$state)
{
$this->error = '在创建目录' . $d . '时出错!';
}

                }
            }
        }
    }
    if(!is_dir($this-&gt;thumbFolder) &amp;&amp; TRUE == $this-&gt;autoThumb)
    {   
        $dir = explode('/', $this-&gt;thumbFolder);
        foreach($dir as $v)
        {
            if($v)
            {
                $d .= $v . '/';
                if(!is_dir($d))
                {
                    $state = mkdir($d);
                    if(!$state)
                    {
                        $this-&gt;error = '在创建目录' . $d . '时出错!';
                    }

                }
            }
        }
    }
}

}
?>

测试demo