Конвертация в WebP на лету для Битрикс сайтов

  • Vadim Tsukanov
    Разработчик
  • Дата публикации
    05.12.2023
  • Категория
    1С-Битрикс
Задача:Конвертация изображений битрикс сайта в WebP

Оптимизация…. в последнее время очень много времени уделяем именно ей. Сегодня поговорим об конвертации изображений в webp на лету

Итак, для начала в init.php,  а лучше в файлик function.php, который подключен в ините вставляем метод:

function makeWebp ($src, $rewrite = false)
{
	if ($src && function_exists('imagewebp')) {
		$newImgPath = str_replace(array('.jpg', '.jpeg', '.gif', '.png'), '.webp', $src);
		if (!file_exists($_SERVER['DOCUMENT_ROOT'].$newImgPath) || $rewrite) {
			$info = getimagesize($_SERVER['DOCUMENT_ROOT'].$src);
			if ($info !== false && ($type = $info[2])) {
				switch ($type) {
					case IMAGETYPE_JPEG:
						$newImg = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'].$src);
						break;
					case IMAGETYPE_GIF:
						$newImg = imagecreatefromgif($_SERVER['DOCUMENT_ROOT'].$src);
						break;
					case IMAGETYPE_PNG:
						$newImg = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].$src);
						imagepalettetotruecolor($newImg);
						imagealphablending($newImg, true);
						imagesavealpha($newImg, true);
						break;
				}
				if ($newImg) {
					imagewebp($newImg, $_SERVER['DOCUMENT_ROOT'].$newImgPath, 90);
					imagedestroy($newImg);
				}
			}
		}

		if (file_exists($_SERVER['DOCUMENT_ROOT'].$newImgPath)) { // Файл мог не создаться по каким-либо причинам
			return $newImgPath;
		}
	}

	return false;
}

Данный метод будем генерировать нам изображение в webp. Как видно, можно установить процент качества. У нас это 90%.

В result_modifier компонента, где нам необходимо это использовать прописываем примерно следующее:

	foreach ($arResult['ITEMS'] as $key => $arItem) {
		$arResult['ITEMS'][$key]['WEBP'] = makeWebp($arItem["DETAIL_PICTURE"]["SRC"]);
	}

Ну а на выходе — просто вставляем в тег <picture>

Еще нет коммментариев. Будь первым!

Оформить заказ в Devstages