zoukankan      html  css  js  c++  java
  • Laravel5.x 封装的上传图片类

    图片缩放需要用conposer安装 ImageManagerStatic类
    可参考下面的地址安装:
    https://www.jb51.net/article/128159.htm

    控制器里:

    控制器里调用上传图片类的方法

    //上传单张图片 前台html表单里传name=goods_img
    //处理上传图片并缩成两张缩略图和一张原图片
    if($file = $request->file('goods_img')){
        //处理上传图片并缩成两张缩略图和一张原图片
        $img_data=$this->thumb_img($file);
        $pic_path = [
            'origin_img_url'=>$pic_data['goods_img_origin'], //原图片(必存)
            'image_url'=>$pic_data['goods_img'], //商品相册图片(必存 大图750*750)
            'thumb_url'=>$pic_data['goods_thumb'],  //缩略图图片(缩略图500*500)
        ];
        //存入表里的操作...
    }
    
    
    // 多张图片上传相册
    //上传多张图片,以数组的形式上传,前台html表单里传name=picture[]
    
    //循环调用单张图上传类
    if($file = $request->file('picture')){
        if(is_array($file)){
            foreach($file as $v){
                if(empty($v)){
                   continue;
                }
                //处理上传图片并缩成三张缩略图和一张原图片
                $pic_path=$this->thumb_img($v,0,1);
                
                //整理图片路径,可以做存入表里的操作
                $pic_path = [
                    'origin_img_url'=>$pic_data['goods_img_origin'], //原图片(必存)
                    'image_url'=>$pic_data['goods_img'], //商品相册图片(必存 大图750*750)
                    'thumb_url'=>$pic_data['goods_thumb'],  //缩略图图片(缩略图500*500)
                    'sm_thumb_url'=>$pic_data['sm_thumb_path'],  //缩略图图片(缩略图100*100)
                ];
                //存入表里的操作...
            }
        }
    }
    
    

    控制器里调用删除图片类的方法

    // (图片在public目录里)
    $this->del_img('/uplodes/2019-03-09/20190309213658.png');
    

    Controller.php 基础控制器里封装上传图片类

    use InterventionImageImageManagerStatic as Image;
    
    /**
     * @desc 单图片文件上传 [单张图片操作]
     * @param $files
     * @return string
     * @return size 文件最大限制(1M)
     * 图片上位置在public/picture_data/下
     */
    public function uploadFile($files,$size=1048576)
    {
        if(empty($files)){
            return '/images/photos/loggeduser.png';
        }
    
        if($files->getClientSize()>$size){
            return false;
        }
    
        $ext=$files->extension();
        $img_array=['gif','jpg','jpeg','bmp','png'];
        if(!in_array($ext,$img_array)){
           return false;
        }
        $basePath = 'picture_data/'.date('Y-m-d',time());//文件上传的目录
        $filename =date('YmdHis',time()).uniqid().".".$files->extension();
    
        if(!file_exists($basePath)){
            mkdir($basePath,0777,true);
        }
    
        move_uploaded_file($files->path(),$basePath. '/'.$filename);
    
        return "/".$basePath. '/'.$filename;
    }
    
    /*
     * 删除图片 [单张图片操作]
     * $img_path 图片的路由 例: /uplodes/2019-03-09/20190309213658.png (图片在public目录里)
     */
    public function del_img($img_path){
        if(empty($img_path) || !is_string($img_path)){
            return false;
        }
        $img_path='.'.$img_path;
        if(file_exists($img_path)){
            $rs=@unlink($img_path);
    //            if(!$rs) returnMsg(1,'删除原图片失败.');
            return true;
        }
        else{
            return false;
        }
    
    }
    
    //[单张图片操作] 处理上传图片并缩成两张缩略图
    /**
     * @param $file 上传图片的临时文件
     * @param int $sm 是否要生成最小的100*100的缩略图 0=生成 , 1=生成
     * @return array 返回所有上传后生成的缩略图和原图片的地址
     * @return size 文件最大限制(1M)
     * @return type 1指定宽高、2指定宽(保持原宽高比例) (宽高会从conmon.php配置文件里取宽高)
     * 图片上位置在public/picture_data/下
     */
    public function thumb_img($file,$type=1,$sm=0,$size=1048576){
        //商品图片(大图750*750px)
    
    
        $goods_img_path = $this->uploadPicture($file,config('common.image_size.big_thumb_width'),$type==1?config('common.image_size.big_thumb_height'):null);
    
    
        //商品图片(大图500*500px)
        $goods_thumb_path = $this->uploadPicture($file,config('common.image_size.mid_thumb_width'),$type==1?config('common.image_size.mid_thumb_height'):null);
        if(!empty($sm)){
            //商品图片(大图100*100px)
            $sm_thumb_path = $this->uploadPicture($file,config('common.image_size.sm_thumb_width'),$type==1?config('common.image_size.sm_thumb_height'):null);
        }
        //原图地址
        $goods_img_origin_path=$this->uploadFile($file,$size);
    
        $img_data = [
            'goods_img_origin'=>!empty($goods_img_origin_path) ? $goods_img_origin_path: '' ,
            'goods_img'=>!empty($goods_img_path)?$goods_img_path:"",
            'goods_thumb'=>!empty($goods_thumb_path)?$goods_thumb_path:'',
        ];
        if(isset($sm_thumb_path) && !empty($sm_thumb_path)){
            $img_data['sm_thumb_path']= !empty($sm_thumb_path) ? $sm_thumb_path: "";
        }
        return $img_data;
    }
    
    
    
    /*
     * 上传指定尺寸图片方法 [单张图片操作]
     * 请求参数
     *   picture file()接收到的临时图片路径源路径
     *   path 路径 $basePath = 'picture_data/'.date('Y-m-d',time());//文件上传的目录
     *   width 宽度(像素)
     *   height 高度(像素) 如果不传是就宽指定的宽等比例缩放高度
     *   filename 文件名(不指定则自动生成)
     *   size 文件最大限制(1M)
     *   图片上位置在public/picture_data/下
     */
    function uploadPicture($picture,$width=200,$height=null,$path='',$filename=null,$size=1048576){
        if(empty($path)){
            $path='picture_data/'.date('Y-m-d',time());
        }
    
        if($picture->getClientSize()>$size){
            return false;
        }
    
        $ext=$picture->extension();
        $img_array=['gif','jpg','jpeg','bmp','png'];
        if(!in_array($ext,$img_array)){
            return false;
        }
        //$this->validate($picture, [
            //'avatar' => 'dimensions:min_width=250,min_height=500'
        //]);
    
        //目录不存在则创建
        if(!is_dir($path)){
            mkdir($path, 0777);
        }
        if(!$filename){
            $filename = uniqid().'.'.$picture->getClientOriginalExtension();
        }else{
            $filename .= '.'.$picture->getClientOriginalExtension();
        }
    
        if(empty($height)){
            $img = Image::make($picture)->resize($width,null,function($constraint){// 调整图像的宽,并约束宽高比(高自动)
                $constraint->aspectRatio();
            });
        }else{
            $img = Image::make($picture)->resize($width, $height);
        }
    
        $res = $img->save($path.'/'.$filename);
        //var_dump($res);
        return '/'.$path.'/'.$filename;
    }
    
        
    
  • 相关阅读:
    HTML 网页创建
    CSS3 opacity
    两数相加的和
    九九乘法表
    Linux下的Makefile初入
    linux 下定义寄存器宏 实现类似于STM32的寄存器操作
    Linux 编译与交叉编译
    linux IMX6 汇编点亮一个LED灯
    Linux基本指令与作用
    C# Task 源代码阅读(2)
  • 原文地址:https://www.cnblogs.com/haima/p/10584427.html
Copyright © 2011-2022 走看看