Opencart 3 + webP + PHP-FPM

Все остальные вопросы
rolluu
Сообщения: 1
Зарегистрирован: Пт мар 28, 2025 11:38 am

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.
Получается совсем все просто и красиво, да и недорого))

Stifler
Сообщения: 32
Зарегистрирован: Вт ноя 05, 2024 8:16 pm

Re: Opencart 3 + webP + PHP-FPM

Сообщение Stifler » Чт апр 10, 2025 12:45 pm

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;
					}
				}
			

Ответить