首页 > 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; //上传文件的新名字
    //开源代码phprm.com
    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 三种类型的文件格式&hellip;&hellip;,请重新上传正确的格式";
            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();
}


文章网址:http://www.phprm.com/tuxiang/fs4427.html

随意转载^^但请附上教程地址。

标签:php缩略图 php自动生成

相关文章

发表留言