暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Thinkphp6框架实现上传图片压缩

牧码人日记 2021-11-29
937

好奇心是最强大的驱动力

阿泽


//首先封装一个图片类
<?php


/**
图片压缩操作类
*/
namespace Img;


class Compression{






private $src;//图片路径


private $imageinfo;


private $image;


public $percent = 0.5;//压缩比[0.5较为合适]


public function __construct($src){


$this->src = $src;


}


/**


打开图片


*/


public function openImage(){






list($width, $height, $type, $attr) = getimagesize($this->src);


$this->imageinfo = array(


'width'=>$width,


'height'=>$height,


'type'=>image_type_to_extension($type,false),


'attr'=>$attr


);


$fun = "imagecreatefrom".$this->imageinfo['type'];


$this->image = $fun($this->src);


}


/**


操作图片


*/


public function thumpImage(){






$new_width = $this->imageinfo['width'] * $this->percent;


$new_height = $this->imageinfo['height'] * $this->percent;


$image_thump = imagecreatetruecolor($new_width,$new_height);


//将原图复制带图片载体上面,并且按照一定比例压缩,极大的保持了清晰度


imagecopyresampled($image_thump,$this->image,0,0,0,0,$new_width,$new_height,$this->imageinfo['width'],$this->imageinfo['height']);


imagedestroy($this->image);


$this->image = $image_thump;


}


/**


输出图片


*/


public function showImage(){






header('Content-Type: image/'.$this->imageinfo['type']);


$funcs = "image".$this->imageinfo['type'];


$funcs($this->image);






}


/**


保存图片到硬盘


*/


public function saveImage($name){


if(empty($name)) return false;
$allowImgs = ['.jpg', '.jpeg', '.png', '.bmp', '.wbmp','.gif']; //如果目标图片名有后缀就用目标图片扩展名 后缀,如果没有,则用源图的扩展名
$dstExt = strrchr($name ,".");
$sourseExt = strrchr($this->src ,".");
if(!empty($dstExt)) $dstExt =strtolower($dstExt);
if(!empty($sourseExt)) $sourseExt =strtolower($sourseExt);
//有指定目标名扩展名
if(!empty($dstExt) && in_array($dstExt,$allowImgs)){
$dstName = $name;
}elseif(!empty($sourseExt) && in_array($sourseExt,$allowImgs)){
$dstName = $name.$sourseExt;
}else{
$dstName = $name.$this->imageinfo['type'];
}


$funcs = "image".$this->imageinfo['type'];


$funcs($this->image,$dstName);






}


/**


销毁图片


*/


public function __destruct(){


imagedestroy($this->image);


}






}






<?php


//使用tp6自带上传实现图片压缩
//可实现6mb图上传得到200kb高清压缩图
public function test(Request $request){


// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('file');
// 上传到本地服务器
        $fileName = Filesystem::putFile('upload/api/img', $file);
        $src = config('app.url').$fileName;
//$src = 'http://pic1.win4000.com/wallpaper/b/57c79dd38f0cb_270_185.jpg';
//后缀
$ext = substr(strrchr($src, '.'), 1);
//压缩
        $image = new Img\Compression($src);
        $image->openImage();
$image->thumpImage();
$new_file_name = md5(mt_rand(100000,9999999));
        $image->saveImage('./upload/api/img/'.date('Ymd').'/'.$new_file_name);
unlink($fileName);//删除原图


        $res = config('app.url').'api/img/'.date('Ymd').'/'.$new_file_name.'.'.$ext;


return $this->success($res);


    }



文章转载自牧码人日记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论