1、basic_data.sql
数据表:t_preference中的('osclass', 'allowedExt', 'png,gif,jpg,jpeg', 'STRING'),添加:'png,gif,jpg,jpeg,webp'
2、includes/osclass/mimes.php
'webp' => 'image/webp',
3、includes/osclass/classes/ImageProcessing.php
修改private function __construct($imagePath) {}
switch (@$this->image_info['mime']) {case 'image/gif':$this->ext = 'gif';$this->mime = 'image/gif';break;case 'image/png':$this->ext = 'png';$this->mime = 'image/png';break;case 'image/webp': // 增加 WebP 处理$this->ext = 'webp';$this->mime = 'image/webp';break;default:$this->ext = 'jpg';$this->mime = 'image/jpeg';if (!$this->_use_imagick) {$bg = imagecreatetruecolor($this->_width, $this->_height);// 处理 PNG、WebP 透明背景if (in_array($this->ext, ['png', 'webp'])) {imagefill($bg, 0, 0, imagecolorallocatealpha($bg, 0, 0, 0, 127));imagesavealpha($bg, true);imagealphablending($bg, false);} else {imagefill($bg, 0, 0, $this->imageColor($bg));imagesavealpha($bg, true);imagealphablending($bg, true);}imagecopy($bg, $this->im, 0, 0, 0, 0, $this->_width, $this->_height);imagedestroy($this->im);$this->im = $bg;}break;}
4、savetofile改成
public function saveToFile($imagePath, $ext = null) {if (file_exists($imagePath) && !is_writable($imagePath)) {throw new RuntimeException("$imagePath is not writable!");}if ($ext == null) {$ext = $this->ext;}// 允许 webp 格式if (!in_array($ext, ['png', 'gif', 'webp'])) {$ext = 'jpeg'; // 默认 jpeg}//var_dump($ext);if ($this->_use_imagick) {if ($ext === 'jpeg' && ($this->ext !== 'jpeg' && $this->ext !== 'jpg')) {$bg = new Imagick();$bg->newImage($this->_width, $this->_height, osc_canvas_background());$this->im->thumbnailImage($this->_width, $this->_height, true);$bg->compositeImage($this->im, Imagick::COMPOSITE_OVER, 0, 0);$this->im = $bg;$this->ext = 'jpeg';}$this->im->setImageDepth(8);$this->im->setImageFilename($imagePath);$this->im->setImageFormat($ext);$this->im->writeImage($imagePath);} else {switch ($ext) {case 'gif':imagegif($this->im, $imagePath);break;case 'png':imagepng($this->im, $imagePath, 0);break;case 'webp': // 增加 WebP 处理if (function_exists('imagewebp')) {//var_dump($ext);var_dump('oka');die;imagewebp($this->im, $imagePath);} else {//var_dump($ext);var_dump('okb');die;throw new RuntimeException("WebP format is not supported by GD");}break;default:if (($ext === 'jpeg' && ($this->ext !== 'jpeg' && $this->ext !== 'jpg')) || $this->_watermarked) {$this->ext = 'jpeg';}imagejpeg($this->im, $imagePath);break;}}}