У WebP есть такой нюанс - не все браузеры его поддерживают.
К примеру, некоторые версии iOS Safari, обычный Safari, IE - не поддерживают WebP.
https://caniuse.com/#feat=webp
Поэтому надо хранить всегда как минимум две версии каждой картинки. Webp (для браузеров с поддержкой WebP) и исходную карти
И отдавать нужную версию в зависимости от браузера.
А исходную картинку надо при этом еще и оптимизировать/сжимать - чтобы даже для браузеров без поддержки WebP картинки отдавались оптимизированными (более легкими по весу) - это еще третья! версия файла.
У сервиса optipic я недавно заметил новый функционал, в который это все уже заложено в коробку.
https://optipic.io/ru/webp/opencart/
Можно даже подключить все так, чтобы урлы картинок не менялись (они остаются точно такими же и выглядят как внутренние url на моем сайте). Но на самом деле они подгружаются через их систему с автоматическим сжатием, конвертацией в webp и распознаванием поддержки webp.
Получается совсем все просто и красиво, да и недорого))
Opencart 3 + webP + PHP-FPM
Re: Opencart 3 + webP + PHP-FPM
не знал что на форуме разрешена рекламаrolluu писал(а): ↑Пт мар 28, 2025 11:39 amУ WebP есть такой нюанс - не все браузеры его поддерживают.
К примеру, некоторые версии iOS Safari, обычный Safari, IE - не поддерживают WebP.
https://caniuse.com/#feat=webp
Поэтому надо хранить всегда как минимум две версии каждой картинки. Webp (для браузеров с поддержкой WebP) и исходную карти
И отдавать нужную версию в зависимости от браузера.
А исходную картинку надо при этом еще и оптимизировать/сжимать - чтобы даже для браузеров без поддержки WebP картинки отдавались оптимизированными (более легкими по весу) - это еще третья! версия файла.
У сервиса optipic я недавно заметил новый функционал, в который это все уже заложено в коробку.
https://optipic.io/ru/webp/opencart/
Можно даже подключить все так, чтобы урлы картинок не менялись (они остаются точно такими же и выглядят как внутренние url на моем сайте). Но на самом деле они подгружаются через их систему с автоматическим сжатием, конвертацией в webp и распознаванием поддержки webp.
Получается совсем все просто и красиво, да и недорого))
а весь текст выше не касается opencart + webP так как картинки и так хранятся в двух форматах оригинал и обработанная webp при исправной GD библиотеке проблем никогда не возникнет, с тем учетом что сама конвертация в webp занимает пару строк кода.
Код: Выделить всё
$gd_info = gd_info();
if($gd_info['WebP Support']) {
$image_new_webp = 'cache/webp/' . utf8_substr($filename, 0, utf8_strrpos($filename, '.')) . '-' . (int)$width . 'x' . (int)$height . '.webp';
if (is_file(DIR_IMAGE . $image_new) && (!is_file(DIR_IMAGE . $image_new_webp) || (filemtime(DIR_IMAGE . $image_new) > filemtime(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, 0755);
}
}
$extension = strtolower($extension);
if ($extension == 'gif') {
$img = imagecreatefromgif(DIR_IMAGE.$image_new);
} elseif ($extension == 'png') {
$img = imagecreatefrompng(DIR_IMAGE.$image_new);
} elseif ($extension == 'jpeg' || $extension == 'jpg') {
$img = imagecreatefromjpeg(DIR_IMAGE.$image_new);
} else {
$img = '';
}
if($img) {
imagepalettetotruecolor($img);
imagewebp($img, DIR_IMAGE.$image_new_webp);
imagedestroy($img);
}
}
if(is_file(DIR_IMAGE . $image_new_webp)) {
if(stripos($this->request->server['REQUEST_URI'], 'admin') === false && isset($this->request->server['HTTP_ACCEPT']) && strpos($this->request->server['HTTP_ACCEPT'], 'image/webp') !== false) {
$image_new = $image_new_webp;
}
}