在opencart 3中可以使用webp图像吗?我的意思是自动生成。
答案 0 :(得分:1)
在OpenCart扩展市场中搜索“ webp”: https://www.opencart.com/index.php?route=marketplace/extension&filter_search=webp
这是一对夫妇,两个都是免费的: https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=36308 https://www.opencart.com/index.php?route=marketplace/extension/info&extension_id=34275
答案 1 :(得分:1)
并非所有浏览器都接受 WEBP 图片格式 但是你可以输入一个代码来检查浏览器是否接受 WEBP 格式,然后你必须制作一个新的图像缓存并将现有图像转换为 webp
在 fir dir 目录/model/tool/image.php 添加
$image_new_webp = 'cachewebp/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.webp';
之后
$image_new = 'cache/'
检查浏览器是否接受 image.webp 并创建新的图像缓存 在同一个文件中:catalog/model/tool/image.php 添加此代码:
$gd = gd_info();
if ($gd['WebP Support']) {
if (!is_file(DIR_IMAGE . $image_new_webp) || (filectime(DIR_IMAGE . $image_new) > filectime(DIR_IMAGE . $image_new_webp))) {
$path = '';
$directories = explode('/', dirname($image_new_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 . $image_old);
$image_webp->resize($width, $height);
$image_webp->save_webp(DIR_IMAGE . $image_new_webp);
}
}
在此行之前:$image_new = str_replace(
现在你需要一个函数来以新格式保存图像 在文件目录上:system/library/image.php 添加此功能:
public function save_webp($file, $quality = 90) {
if (is_resource($this->image)) {
imagewebp($this->image, $file, $quality);
imagedestroy($this->image);
}
}
在此行之前:public function save($file, $quality = 90) {
输出webp图片格式 在文件 system/library/response.php 上添加这个函数
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) { // admin is your dashboard url if you have different name jst change it
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);
}
}
}
}
}
在此行之前:private function compress($data, $level = 0)
在同一个文件中,您必须输出 webpRebuild 函数,因此添加以下代码:
$this->webpRebuild($this->output);
在这一行之后:$output = $this
答案 2 :(得分:0)
最佳解决方案是在Design Cart。如果用户的浏览器支持webp,该扩展程序将生成其他webp图像并显示它们。 Download。