Конвертер на лету. Webp в битрикс

Начнем с Google Page Speed. Эта система, оценивая ваш сайт, часто просит перевести все изображения в более современный формат, webp, предложенный Google в 2010 году. Коротко, суть этого формата – в хитроумном предсказании цвета соседних пикселей по уже имеющимся.

Представьте, что у вас 5 изображений на сайте. В этом случае вы с легкостью сможете вручную перевести их в webp. А вот если их 100, ситуация уже не такая простая. Или не охота при каждом добавлении картинки переводить её в webp.

Сегодня мы создадим программу, которая будет автоматически конвертировать файл jpg в webp при добавлении изображения элемента. Главное, что нам понадобится – установленная библиотека gd в php и рабочая функция imagewebp().

Создадим в корне сайта каталог tmp и дадим ему права 755. Сюда будут кидаться созданные файлы webp перед отправкой в битрикс.
Далее, у инфоблоков, с которыми будем работать, необходимо создать свойство типа файл. Название любое, код: WEBP_FILE

Свойство Webp

Далее в файл 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.
Надеюсь, статья будет полезна.


Статьи на тему: Оставить комментарий
x
Комментарий успешно отправлен и будет доступен после проверки модератором!