基于laravel的腾讯云cos存储压缩后上传图片

14 篇文章 0 订阅
<?php
header('Content-type: image/PNG');
$image=@imagecreatefrompng('http://www.phpernote.com/images/logo.png');
imagepng($image,'logo.png',9); //注意后面那个数字0,这里即压缩等级,参数范围:0-9*/
imagedestroy($image);






//这里进行图片压缩,目前只压缩png/jpg格式
if($image->getClientMimeType() == "image/png"){//图片格式
$src = @imagecreatefrompng ($image->getRealPath());  //创建画布,从缓存文件路径载入图片
list($width,$height) = getimagesize($image->getRealPath());   //获取宽高并赋值
$newwidth = $width/4;  //压缩后宽
$newheight = $height/4; //压缩后高
$tmp = imagecreatetruecolor($newwidth,$newheight); //压缩后宽高创建一个空图片 
imagecopyresized($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);  //将缓存文件复制到新建空图片,
imagepng($tmp, $image->getRealPath(), 9);  //新建图片替换缓存文件
imagedestroy($tmp); //清除新建文件,缓存文件被压缩后的替换
}else if ($image->getClientMimeType() == "image/jpeg") {//图片格式
$src = @imagecreatefromjpeg ($image->getRealPath());  //创建画布,从缓存文件路径载入图片
list($width,$height) = getimagesize($image->getRealPath());   //获取宽高并赋值
$newwidth = $width/4;  //压缩后宽
$newheight = $height/4; //压缩后高
$tmp = imagecreatetruecolor($newwidth,$newheight);  //压缩后宽高创建一个空图片
imagecopyresized($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);  //将缓存文件复制到新建空图片,
imagejpeg($tmp, $image->getRealPath(), 9);  //新建图片替换缓存文件
imagedestroy($tmp); //清除新建文件,缓存文件被压缩后的替换
}else if ($image->getClientMimeType() == "image/gif") {//图片格式
$src = @imagecreatefromgif ($image->getRealPath());  //创建画布,从缓存文件路径载入图片
list($width,$height) = getimagesize($image->getRealPath()); //获取宽高并赋值  
$newwidth = $width/4;  //压缩后宽
$newheight = $height/4; //压缩后高
$tmp = imagecreatetruecolor($newwidth,$newheight);  //压缩后宽高创建一个空图片
imagecopyresized($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);  //将缓存文件复制到新建空图片,
imagegif($tmp, $image->getRealPath(), 9); //新建图片替换缓存文件 
imagedestroy($tmp); //清除新建文件,缓存文件被压缩后的替换
}else if ($image->getClientMimeType() == "image/wbmp") {//图片格式
$src = @imagecreatefromwbmp ($image->getRealPath());  //创建画布,从缓存文件路径载入图片
list($width,$height) = getimagesize($image->getRealPath());   //获取宽高并赋值
$newwidth = $width/4;  //压缩后宽
$newheight = $height/4; //压缩后高
$tmp = imagecreatetruecolor($newwidth,$newheight);  //压缩后宽高创建一个空图片
imagecopyresized($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);  //将缓存文件复制到新建空图片,
imagewbmp($tmp, $image->getRealPath(), 9);  //新建图片替换缓存文件
imagedestroy($tmp); //清除新建文件,缓存文件被压缩后的替换
}


function upload_cos(Illuminate\Http\Request $request)
    {
        $appid = config('file.tengxun_cos.appid');//获取配置参数
        $region = config('file.tengxun_cos.region');//获取配置参数
        $bucket = config('file.tengxun_cos.bucket');//获取配置参数
        $SecretId = config('file.tengxun_cos.SecretId');//获取配置参数
        $SecretKey = config('file.tengxun_cos.SecretKey');//获取配置参数
        $Folder = config('file.tengxun_cos.Folder');//获取配置参数
        
        if ($request->hasFile('file')) {//获取file标签
            $image = $request->file('file');//获取file标签
            $new_name = time() . '_' . rand(1000000, 9999999) . '.' . $image->getClientOriginalExtension();//新文件名
            $cosClient = new Client(//实例化上传类配置参数
                array(
                    'region' => $region,
                    'credentials' => array(
                        'appId' => $appid,
                        'secretId' => $SecretId,
                        'secretKey' => $SecretKey
                    )
                )
            );
            if($image->getClientSize() > 1048576){//压缩图片
                //这里进行图片压缩,目前只压缩png/jpg格式
                if($image->getClientMimeType() == "image/png"){
                    $src = @imagecreatefrompng ($image->getRealPath());  
                    list($width,$height) = getimagesize($image->getRealPath());  
                    $newwidth  = $width /2;  
                    $newheight = $height/2;   
                    $tmp = imagecreatetruecolor($newwidth,$newheight);  
                    imagecopyresized($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);  
                    imagepng($tmp, $image->getRealPath(), 50);  
                    imagedestroy($tmp); 
                }else if ($image->getClientMimeType() == "image/jpeg") {
                    $src = @imagecreatefromjpeg ($image->getRealPath());  
                    list($width,$height) = getimagesize($image->getRealPath());  
                    $newwidth  = $width /2;  
                    $newheight = $height/2;  
                    $tmp = imagecreatetruecolor($newwidth,$newheight);  
                    imagecopyresized($tmp, $src, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);  
                    imagejpeg($tmp, $image->getRealPath(), 50);  
                    imagedestroy($tmp); 
                }
            }
            $result_upload = $cosClient->putObject(//执行上传
                array(
                    'Bucket' => $bucket,
                    'Key' => $Folder.$new_name,
                    'Body' => file_get_contents($image->getRealPath())
                )
            );
            $res['src_hash']=str_replace('"','',$result_upload['ETag']);//图片一个编码
            $res['file_name']=$new_name;//新文件名
            $res['file_path']=urldecode($result_upload['ObjectURL']);//上传后路径
            $res['file_size']=getUriLen(urldecode($result_upload['ObjectURL']));//压缩上传后的大小,调用下面函数用curl获取图片header头来获得压缩后大小
            $res['original_name']=$image->getClientOriginalName();//原始文件名
            $res['mimeType']=$image->getClientMimeType();//文件类型
            $response = array(
                'status' => 200,
                'message' => '上传成功',
                'result'=>$res
            );


        } else {
            $response = array(
                'status' => 500,
                'message' => '请选择要上传的文件'
            );
        }
        return $response;
    }
function getUriLen($uri)  
    {     
        ob_start();  
        
        $ch = curl_init($uri);  
        curl_setopt($ch, CURLOPT_HEADER, 1);  
        curl_setopt($ch, CURLOPT_NOBODY, 1);  //nobody是关键   
        $okay = curl_exec($ch);  
        curl_close($ch);  
        
        $head = ob_get_contents();  
        ob_end_clean();  
        
        $regex = '/Content-Length:\s+(\d+)/';  
        preg_match($regex, $head, $matches); 


        return $matches[1];   
    } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值