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