• 技术文章 >后端开发 >php教程

    php 上传图片自动生成缩略图_PHP教程

    2016-07-13 10:46:07原创362
    一款实现的生成小图功能的实现代码,有需要的朋友可以参考,每个都有详细的说明参数。
    代码如下 复制代码





    uploads.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 "%%%
    ";
    }

    if(is_uploaded_file($this->tmp)){
    if(move_uploaded_file($this->tmp, $this->new_name)){
    echo "文件上传成功
    ";
    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文件中得配置
    ";
    break;
    case 2:
    echo "上传文件的大小超过了表单中的限制大小
    ";
    break;
    case 3:
    echo "只有部分文件被上传
    ";
    break;
    case 4:
    echo "没有文件被上传
    ";
    break;
    case 6:
    echo "php.ini中没有设置图片存放的临时未知
    ";
    break;
    case 7:
    echo "硬盘不可以写入,上传失败
    ";
    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();
    }

    ?>


    www.bkjia.comtruehttp://www.bkjia.com/PHPjc/632970.htmlTechArticle一款实现的生成小图功能的实现代码,有需要的朋友可以参考,每个都有详细的说明参数。 代码如下 复制代码 form action=uploads.php method=pos...

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php 上传 图片 自动生成 略图 一款 实现 生成 小图 功能 代码 要的 朋友 可以 参考 每个
    上一篇:php 随机显示图片的多种方法_PHP教程 下一篇:php生成图片缩略图类程序_PHP教程
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP写入XML文件事字表数据只读一条数据,什么原因 • 【PHP】界别include(),require(),include_once(),require_once() • js 弹窗出现乱码了解决方案 • 本人初学者刚接触php,安装安装了XAMPP后,出现了些有关问题,求大神帮帮忙 • [转载]40个迹象表明你还是PHP初学者
    1/1

    PHP中文网