Представьте, что у вас 5 изображений на сайте. В этом случае вы с легкостью сможете вручную перевести их в webp. А вот если их 100, ситуация уже не такая простая. Или не охота при каждом добавлении картинки переводить её в webp.
Сегодня мы создадим программу, которая будет автоматически конвертировать файл jpg в webp при добавлении изображения элемента. Главное, что нам понадобится – установленная библиотека gd в php и рабочая функция imagewebp().
Создадим в корне сайта каталог tmp и дадим ему права 755. Сюда будут кидаться созданные файлы webp перед отправкой в битрикс.
Далее, у инфоблоков, с которыми будем работать, необходимо создать свойство типа файл. Название любое, код: WEBP_FILE

Далее в файл init.php битрикса добавим код:
AddEventHandler("iblock", "OnAfterIBlockElementAdd", "fillImages"); AddEventHandler("iblock", "OnBeforeIBlockElementUpdate", "fillImages"); function fillImages(&$arFields){ if(in_array($arFields['IBLOCK_ID'], array(3))){ $res = CIBlockElement::GetProperty(3, $arFields['ID'], "sort", "asc", array("CODE" => "IMAGE")); if ($ob = $res->GetNext()){ $file = $_SERVER['DOCUMENT_ROOT'].CFile::GetPath($ob['VALUE']); if(exif_imagetype($file)==IMAGETYPE_JPEG) $img = imagecreatefromjpeg($file); if(exif_imagetype($file)==IMAGETYPE_PNG) $img = imagecreatefrompng($file); imagepalettetotruecolor($img); imagealphablending($img, true); imagesavealpha($img, true); $path = $_SERVER['DOCUMENT_ROOT']."/tmp/webp.webp"; imagewebp($img, $path, 90); imagedestroy($img); CIBlockElement::SetPropertyValuesEx($arFields['ID'], $arFields['IBLOCK_ID'], array("WEBP_FILE" => CFile::MakeFileArray($path))); } } }
В данном примере представлена работа с инфоблоком №3. Немного доработав, можно туда вставить любые инфоблоки, какие понравятся. Все, теперь картинки в формате jpg будут переделаны и сохранены в webp. Уже добавленные элементы можно пересохранить, и будет сгенерирована картинка webp битрикс. Теперь важно в шаблонах компонентов, выводящих картинки, сделать чтобы картинки выводились из свойства битрикс WEBP_FILE.
Надеюсь, статья будет полезна.