Оптимизация картинок из jpg в webp для Битрикс

Обзор обновления aveCRM 7.6
Добавить в избранное для 1С-Битрикс
Оптимизация картинок из jpg в webp для Битрикс

Согласно рекомендациям сервиса Google Pagespeed Insights, для ускорения работы сайта, необходимо уделить особое внимание изображениям. Картинка в формате jpg может весить около 100кб, тогда как в формате webp вес сокращается до 30кб. Для начала работы необходимо в файл /local/php_interface/init.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 $src;
}

А далее в любом компоненте или шаблоне можно использовать следующий код:

$arItem["PREVIEW_PICTURE"]["SRC"] = makeWebp($arItem["PREVIEW_PICTURE"]["SRC"]);

Скрипт будет проверять, есть ли изображение в новом формате и если нет - создавать его, а если есть - сразу выводить то, которое было ранее создано.

Вы готовы начать работу или получить консультацию?

Самый простой способ - написать нам. Не стесняйтесь задавать вопросы. Мы готовы начать обсуждение вашего проекта сейчас, сделайте следующий шаг, напишите нам.