前端传来base64码的图片,php怎么处理?

    $bases = $_POST['img']; //图片流
    $bases_size = $_POST['size'] ? $_POST['size'] : 2; //图片大小,可动态限制,默认为2M
    $base64_image = str_replace(' ', '+', $bases);
    //post方式接收的数据, 加号会被替换为空格, 需要重新替换回来, 若不是post数据, 不需要执行
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $base64_image, $result)){
        //判断图片后缀
        $pic_ars = array('jpg','jpeg','png');
        if(!in_array($result[2],$pic_ars)){
            exit(json_encode(array('status'=>0,'message'=>'文件格式有误')));
        }else{
            //定义文件名称
            $picname = uniqid(); //这里会重复上传图片,如果不允许的话,可以给定特殊文件名称来判断,比如用户名
            $picdir=$picname.'.'.$result[2];
        }
        //判断大小
        $size_format = ceil((strlen($bases) - ((strlen($bases)/8)*2))/1024);
        if($size_format > $bases_size*1024){
            exit(json_encode(array('status'=>0,'message'=>'图片大小不能超过2M')));
        }
        //定义图片储存文件目录
        $dir = $_SERVER['DOCUMENT_ROOT'] . "/upload/".date('ymd');
        if (!is_dir($dir)){
            //如果不存在就创建该目录
            mkdir($dir,0777,true);
        }
        //图片名称
        $image_url = $dir.'/'.$picdir;
        //储存图片
        $img_url = '';//图片路径
        if (file_put_contents($image_url, base64_decode(str_replace($result[1], '', $base64_image)))){
            $img_url = $_SERVER['SERVER_ADDR']."/upload/".$picdir;
        }
        exit($img_url);
    }
发布了45 篇原创文章 · 获赞 7 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_36431166/article/details/100099028