最近发现有用户上传了非常大的图片,如png和bmp。
所以对图片上传功能做了一些改动。
增加webp和avif格式的支持
--- a/fastadmin/addons/alioss/controller/Index.php+++ b/fastadmin/addons/alioss/controller/Index.php@@ -99,7 +99,7 @@ class Index extends Controller- if (in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf'])) {+ if (in_array($suffix, ['gif', 'jpg', 'jpeg', 'bmp', 'png', 'swf', 'webp', 'avif'])) {
自动压缩转换
原有上传保存逻辑不变,但在检查文件过大,且有压缩的可能的情况下。
自动再压缩一份新的webp格式,并上传到OSS。
这样原图 xx.png 也在,但默认网页上面展示的是 xx.png.webp
// 针对非动画文件,如果文件体积或图片尺寸过大,将转换为 webp 格式。if (in_array($suffix, ['jpg', 'jpeg', 'bmp', 'png'])){ $maxSize = 800; if (($imagewidth > $maxSize) || ($fileInfo['size'] > 1024*100)) { if($imagewidth > $maxSize){ $image = thinkImage::open($filePath); $image->thumb($maxSize, $maxSize); $image->save($filePath); } $webpName = $object . '.webp'; // URL相对路径 $webpFileName = ROOT_PATH . '/public/' . $webpName; // 本地绝对路径 $quality = 70; // 照片质量 // 转为webp $result = imagewebp(imagecreatefromstring(file_get_contents($filePath)), $webpFileName, $quality); if ($result) { try { $ossClient->uploadFile($config['bucket'], $webpName, $webpFileName); $url = '/' . $webpName; // 更新对外展示URL // remove } catch (OssException $e) { $this->error('webp上传失败'); } } }}
希望以上内容对你有所帮助!如果还有其他问题,请随时提问。 各类知识收集 拥有多年CMS企业建站经验,对 iCMS, Fastadmin, ClassCMS, LeCMS, PbootCMS, PHPCMS, 易优CMS, YzmCMS, 讯睿CMS, 极致CMS, Wordpress, HkCMS, YznCMS, WellCMS, ThinkCMF, 等各类cms的相互转化,程序开发,网站制作,bug修复,程序杀毒,插件定制都可以提供最佳解决方案。