From 89e46189bd87790794f8a1e4e7aeffb24582fc4b Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Sat, 5 Jul 2025 15:19:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=90=8E=E5=8F=B0=20=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=B0=E5=A2=9Ewebp=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Upload.php | 35 +++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/app/admin/controller/v1/Upload.php b/app/admin/controller/v1/Upload.php index 91488a0a..a2f729be 100644 --- a/app/admin/controller/v1/Upload.php +++ b/app/admin/controller/v1/Upload.php @@ -45,17 +45,39 @@ class Upload // 获取图片上传配置 list( 'filename_keep' => $filename_keep, - 'filemd5_unique' => $filemd5_unique + 'filemd5_unique' => $filemd5_unique, + 'filetype_to' => $filetype_to, ) = $this->getUploadOptions('upload_image'); + + // 获取文件大小 + $file_size = $file->getSize(); + // 获取文件mime类型 + $mime_type = $file->getOriginalMime(); + // 是否需要根据文件MD5值检查文件是否已存在 $image_model = $filemd5_unique ? SysImageUploadRecordModel::md5($filemd5)->find() : null; if (is_null($image_model)) { // 检查是否需要保留原文件名生成器 $name_rule = fn() => $filename_keep ? $this->filenameGenerator($file) : null; - $filename = Filesystem::disk('image')->putFile($param['module'], $file, $name_rule()); + // 处理图片 $image_manager = ImageManager::imagick(); - $image = $image_manager->read('.' . $storage . '/' . $filename); + if ($filetype_to == 'original') { + $filename = Filesystem::disk('image')->putFile($param['module'], $file, $name_rule()); + $image = $image_manager->read('.' . $storage . '/' . $filename); + } + else if ($filetype_to == 'webp') { + $image = $image_manager->read($file->getRealPath()); + // 转换为webp格式 + $webp = $image->toWebp(75); + $root = config('filesystem.disks.image.root'); + $filename = $param['module'] . '/' . ($name_rule() ?? date('Ymd') . '/' . md5((string)time()) . '.webp'); + $webp->save($root . '/' . $filename); + // 获取webp文件大小 + $file_size = $webp->size(); + // 获取webp文件mime类型 + $mime_type = $webp->mimetype(); + } // 水印 list( @@ -126,15 +148,15 @@ class Upload $idx = strrpos($filename, '.'); $thumb_filename = mb_substr($filename, 0, $idx) . '_thumb.' . mb_substr($filename, $idx + 1); $image->save('.' . $storage . '/' . $thumb_filename); - + // 保存图片 $image_model = new SysImageUploadRecordModel(); $image_model->language_id = request()->lang_id; $image_model->module = $param['module']; $image_model->image_path = $filename; $image_model->image_thumb = $thumb_filename; - $image_model->file_size = $file->getSize(); - $image_model->file_type = $file->getOriginalMime(); + $image_model->file_size = $file_size; + $image_model->file_type = $mime_type; $image_model->file_md5 = $filemd5; $image_model->file_sha1 = $filesha1; if (!$image_model->save()) { @@ -179,6 +201,7 @@ class Upload return [ 'filename_keep' => (int)data_get($options, 'filename_keep.value', 0) == 1, 'filemd5_unique' => (int)data_get($options, 'filemd5_unique.value', 0) == 1, + 'filetype_to' => data_get($options, 'filetype_to.value', 'original'), ]; } /**