代码如下
<?php
class ModelToolImage extends Model {
public function resize($filename, $width, $height) {
if (!is_file(DIR_IMAGE . $filename)) {
return;
}
$extension = pathinfo($filename, PATHINFO_EXTENSION);
$old_image = $filename;
$new_image = ‘cache/’ . utf8_substr($filename, 0, utf8_strrpos($filename, ‘.’)) . ‘-‘ . $width . ‘x’ . $height . ‘.’ . $extension;
$new_image_webp = ‘cachewebp/’ . utf8_substr($filename, 0, utf8_strrpos($filename, ‘.’)) . ‘-‘ . (int)$width . ‘x’ . (int)$height . ‘.webp’;
$gd = gd_info();
if ($gd[‘WebP Support’]) {
if (!is_file(DIR_IMAGE . $new_image_webp) || (filectime(DIR_IMAGE . $old_image) > filectime(DIR_IMAGE . $new_image_webp))) {
$path = ”;
$directories = explode(‘/’, dirname($new_image_webp));
foreach ($directories as $directory) {
$path = $path . ‘/’ . $directory;
if (!is_dir(DIR_IMAGE . $path)) {
@mkdir(DIR_IMAGE . $path, 0777);
}
}
$image_webp = new Image(DIR_IMAGE . $old_image);
$image_webp->resize($width, $height);
$image_webp->save_webp(DIR_IMAGE . $new_image_webp);
}
if ($this->request->server[‘HTTPS’]) {
return $this->config->get(‘config_ssl’) . ‘image/’ . $new_image_webp;
} else {
return $this->config->get(‘config_url’) . ‘image/’ . $new_image_webp;
}
}else{
if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_IMAGE . $old_image) > filectime(DIR_IMAGE . $new_image))) {
$path = ”;
$directories = explode(‘/’, dirname(str_replace(‘../’, ”, $new_image)));
foreach ($directories as $directory) {
$path = $path . ‘/’ . $directory;
if (!is_dir(DIR_IMAGE . $path)) {
@mkdir(DIR_IMAGE . $path, 0777);
}
}
list($width_orig, $height_orig) = getimagesize(DIR_IMAGE . $old_image);
if ($width_orig != $width || $height_orig != $height) {
$image = new Image(DIR_IMAGE . $old_image);
$image->resize($width, $height);
$image->save(DIR_IMAGE . $new_image);
} else {
copy(DIR_IMAGE . $old_image, DIR_IMAGE . $new_image);
}
}
if ($this->request->server[‘HTTPS’]) {
return $this->config->get(‘config_ssl’) . ‘image/’ . $new_image;
} else {
return $this->config->get(‘config_url’) . ‘image/’ . $new_image;
}
}
}
}
<file path=”system/library/image.php”>
<operation>
<search><![CDATA[public function save($file, $quality = 90) {]]></search>
<add position=”before”><![CDATA[
public function save_webp($file, $quality = 90) {
if (is_resource($this->image)) {
imagewebp($this->image, $file, $quality);
imagedestroy($this->image);
}
}
接着按照插件添加代码
]]></add>
</operation>
</file>
<file path=”system/library/response.php”>
<operation>
<search><![CDATA[private function compress($data, $level = 0)]]></search>
<add position=”before” ><![CDATA[
public function webpRebuild($output) {
$gd = gd_info();
if ($gd[‘WebP Support’]) {
$uri = ”;
if (isset($_SERVER[‘REQUEST_URI’])) {
$uri = $_SERVER[‘REQUEST_URI’];
}
if (stripos($uri, ‘admin’) === false) {
if (isset($_SERVER[‘HTTP_ACCEPT’]) && isset($_SERVER[‘HTTP_USER_AGENT’])) {
if( strpos( $_SERVER[‘HTTP_ACCEPT’], ‘image/webp’ ) !== false ) {
$re = ‘/(cache)(.*)(\.jpg|\.png|.jpeg)/U’;
$subst = ‘$1webp$2.webp’;
$this->output = preg_replace($re, $subst, $this->output);
}
}
}
}
}
]]></add>
</operation>
<operation>
<search><![CDATA[$output = $this]]></search>
<add position=”before” ><![CDATA[ $this->webpRebuild($this->output); ]]></add>
</operation>
</file>
Comments