支持PHP7.3以上,只支持本地,不支持远程OSS,升级可能会有影响,
1:\extend\function.php 底部增加
if (!function_exists('diy_convertImageToWebP')) {
/**
* 将图片转换为WebP格式,并更新数据库记录。
*
* @param int $imageId 图片ID
* @return string|bool 成功返回新图片的URL路径,失败返回false
*/
function diy_convertImageToWebP($imageId)
{
//必须支持PHP7.3以上
if(version_compare(PHP_VERSION,'7.3.0','<')) return false;
// 如果图片ID不存在,则直接返回false
if(!$imageId) return false;
// 查询图片数据
$imageData = db('uploads')->where('img_id', $imageId)->find();
// 如果图片数据不存在,也返回false
if(!$imageData) return false;
// 构建图片的本地路径
$localPath = ROOT_PATH . $imageData['image_url'];
$localPath = str_replace(['\\', '//'], '/', $localPath); // 规范化路径
// 构建图片的URL路径
$urlPath = $imageData['image_url'];
$urlPath = str_replace(['\\', '//'], '/', $urlPath); // 规范化路径
// 构建图片的URL路径
$title = pathinfo($imageData['title'], PATHINFO_FILENAME) . '.webp';
// 获取图片的基本信息
list($width, $height, $fileType) = @getimagesize($localPath);
// 检查是否能正确获取图片信息
if($fileType === false) return false;
// 根据图片类型创建图像资源
switch ($fileType) {
case IMAGETYPE_GIF:
$imageResource = imagecreatefromgif($localPath);
break;
case IMAGETYPE_JPEG:
$imageResource = imagecreatefromjpeg($localPath);
break;
case IMAGETYPE_PNG:
$imageResource = imagecreatefrompng($localPath);
break;
default:
return false; // 不支持的图片类型
}
// 定义新的文件名和路径
$newFileName = pathinfo($localPath, PATHINFO_FILENAME) . '.webp';
$newLocalPath = dirname($localPath) . '/' . $newFileName;
$newUrlPath = dirname($urlPath) . '/' . $newFileName;
// 转换图片为WebP格式并保存到服务器
imagewebp($imageResource, $newLocalPath, 80); // 第三个参数是图片质量(0-100)
imagedestroy($imageResource); // 释放内存中的图像资源
//获得新图的大小
$newFileSize = filesize($newLocalPath);
// 更新数据库中的图片信息
db('uploads')->where('img_id', $imageId)->update([
'title' => $title,
'image_url' => $newUrlPath,
'filesize' => $newFileSize,
'mime' => 'image/webp'
]);
// 删除旧的图片文件
unlink($localPath);
// 返回新图片的URL路径
return $newUrlPath;
}
}
2:\application\admin\controller\Ueditor.php
335行
$data['img_id'] = $img_id;
下面增加
//编辑器单个上传-新增图片上传成webp
$image_webp = diy_convertImageToWebP($img_id);
if($image_webp) $data['url'] = $image_webp;
760行
/*-------------------------保存上传图片记录 end-----------------------*/
下面增加
//上传图片列表-上传-新增图片上传成webp
$image_webp = diy_convertImageToWebP($img_id);
if($image_webp) $return_data['url'] = $image_webp;
修改之前请备份!