thinkphp6,压缩图片内存,并上传到oss,质量影响不大。
2022-11-24 11:10:29
229
{{single.collect_count}}

首先安装官方推荐的上传云端插件 Thans / thinkphp-filesystem-cloud

1采用composer安装

composer require thans/thinkphp-filesystem-cloud

2: 在config/filesystem.php中添加阿里云到配置

<?phpreturn [// 默认磁盘'default' => env('filesystem.driver', 'aliyun'),// 磁盘列表'disks' => ['local'=> ['type' => 'local','root' => app()->getRuntimePath() . 'storage',],'public' => [// 磁盘类型'type' => 'local',// 磁盘路径'root' => app()->getRootPath() . 'public/storage',// 磁盘路径对应的外部URL路径'url'=> '/storage',// 可见性'visibility' => 'public',],// 更多的磁盘配置信息'aliyun' => ['type' => 'aliyun','accessId' => env('oss.accessid'),'accessSecret' => env('oss.accesssecret'),'bucket' => env('oss.bucket'),'endpoint' => env('oss.endpoint'),'url'=> 'https://'.env('oss.endpoint'),//不要斜杠结尾,此处为URL地址域名。],],];

3在您的环境中安装好Imagick扩展库,这个自行找教程安装,推荐用这个压缩,gd压缩占内存

4然后编写业务逻辑代码

<?phpnamespace app\controller;use think\facade\App;use think\facade\Filesystem;use think\File;use app\BaseController;class Upload extends BaseController{public function uploadImg(){$file = request()->file('file');try {//限制内存 2m$file_size = 1024 * 1024 * 2;//验证图片格式validate(['file' => ['fileSize' => $file_size,'fileExt' => 'jpg,png,gif,jpeg,bmp','fileMime' => 'image/jpeg,image/png,image/gif',]])->check(['file' => $file]);//先将图片保存到本地$local_savename = Filesystem::disk('local')->putFile(config('app.app_name'), $file);$local_savename_path = App::getRootPath() . "runtime/storage/" . $local_savename;//获取图片后缀$res_extension = $file->extension();//以下类型的图片才可以压缩,gif不行if ($res_extension == 'jpg' || $res_extension == 'jpeg' || $res_extension == 'png') {//压缩图片$small_image = new \Imagick($local_savename_path);//压缩程度75%,测试过75比较好,质量差距不大$small_image->setImageCompressionQuality(75);$res = $small_image->writeImage($local_savename_path);$small_image->clear();$small_image->destroy();} //将本地压缩后的图片转为对象$f = new File($local_savename_path);//上传到oss我默认是oss,不选disk就是上传到oss$savename = Filesystem::putFile(‘topic’, $f);//上传的路径有时会变成\\,转一下$savename = str_replace("\\", "/", $savename);//删除本地的压缩后的图片@unlink($local_savename_path);//拿到上传到oss到图片路径echo$savename;} catch (\think\exception\ValidateException $e) { echo 'fail'; }}}

这是用云开发开发的小程序,可以参考一下

在这里插入图片描述

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}