我在Opencart 3上需要webp图像。可以吗?

时间:2019-04-01 08:00:06

标签: image opencart

在opencart 3中可以使用webp图像吗?我的意思是自动生成。

3 个答案:

答案 0 :(得分:1)

答案 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