Изображения WebP для Opencart и OcStore

Zheleznov

Создатель
Регистрация
22 Ноя 2015
Сообщения
18
Реакции
2
Модуль WebP Opencart заменяет формат изображений в магазине с JPG, PNG и GIF на новый оптимизированный формат разработанный Google — WebP Image.

При проверке оптимизации сайта с помощью PageSpeed Insights от Google, сервис сообщит вам об необходимости оптимизировать на сайте все фото в расширении WebP.

Возможности модуля:​

  • Автоматическая конвертация расширения изображений Opencart в Webp
  • Улучшение показателей сайта (скорость загрузки)
  • Экономия дискового пространства хостинга

Для просмотра ссылки Войди или Зарегистрируйся

ocStore21
ocStore23

oc20-21
oc3x
oc23

Для просмотра ссылки Войди или Зарегистрируйся
 
глянув у код... довго не вчитувався, але шось там накручено, зокрема нсторожили ось ці рядки:
PHP:
error_reporting(0);
ini_set('display_errors', 0);
котрі вказують, що потрібно "примусово" приховувати будь які помилки при генерації подібних зображень, що не є гуд... ну і кидати помідором у художника теж не прийнято, тому моє рішення має ось такий вид:
у самій моделі (хоча моделлю назвати важко, там логіка контроллера і до взаємодії з базою ніяого відношення нема, проте, у catalog/model/tool/image.php , я дописав окремий метод:
PHP:
    public function resizeWebp($filename, $width, $height) {
        if (!is_file(DIR_IMAGE . $filename)) {
            return;
        }
        $old_image = $filename;
        $gd = gd_info();     
        if ($gd['WebP Support']) {
            $new_image = 'cachewebp/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.webp';
            if (!is_file(DIR_IMAGE . $new_image) || (filectime(DIR_IMAGE . $old_image) > filectime(DIR_IMAGE . $new_image))) {
                $path = '';
                $directories = explode('/', dirname($new_image));
                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);
            }
        } else {
            $extension = pathinfo($filename, PATHINFO_EXTENSION);
            $old_image = $filename;
            $new_image = 'cache/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . $width . 'x' . $height . '.' . $extension;
            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;
        }
    }
та замінив ним стандартний resize + додав у основному класі метод збереження webP малюнку в окремий каталог в кеші ( 'cachewebp' ) system/library/image.php ось такий метод:

PHP:
    public function save_webp($file, $quality = 100) {
        if (is_resource($this->image)) {
            imagewebp($this->image, $file, $quality);
            imagedestroy($this->image);
        }
    }
поимлок по журналу не помічаю, але й інструкцію контентщику дав, щоб gif-и не вантажив до файлів.
 
Назад
Сверху