Оптимизация изображений для Bitrix: конвертация в WebP и создание адаптивных тегов HTML

Внимание! Работает режим премодерации. Все сообщения публикуются после проверки!
Страницы: 1
Ответить
RSS
Оптимизация изображений для Bitrix: конвертация в WebP и создание адаптивных тегов HTML
Оптимизация изображений для Bitrix: конвертация в WebP и создание адаптивных тегов HTML

Скорость загрузки веб-страниц и качество изображений — ключевые факторы,  влияющие на пользовательский опыт и SEO-оптимизацию. В этой статье мы  рассмотрим, как преобразовать изображения в формат WebP для эффективного  отображения на сайтах, разработанных с использованием CMS 1С-Битрикс, а  также как динамически генерировать адаптивный HTML-код для этих  изображений.
Пример полного кода, объединяющий все части из статьи, с небольшими улучшениями для надёжности (проверка директории, создание WebP только при отсутствии, обработка PNG с альфа-каналом):

Файл: local/php_interface/init.php
Код
<?php

// Преобразование изображений в формат WebP
function convertToWebP($source, $destination)
{
    // Проверяем, существует ли исходное изображение
    if (!file_exists($source)) {
        return false;
    }

    // Получаем информацию о типе изображения
    $info = getimagesize($source);
    $image = null;

    // Открываем изображение в зависимости от его типа
    if ($info['mime'] === 'image/jpeg') {
        $image = imagecreatefromjpeg($source);
    } elseif ($info['mime'] === 'image/png') {
        // Учитываем прозрачность PNG
        $image = imagecreatefrompng($source);
        imagealphablending($image, false);
        imagesavealpha($image, true);
    } elseif ($info['mime'] === 'image/gif') {
        $image = imagecreatefromgif($source);
    }

    // Если изображение не удалось открыть, возвращаем false
    if ($image === null) {
        return false;
    }

    // Создаём директорию для WebP, если её нет
    $dir = dirname($destination);
    if (!is_dir($dir)) {
        mkdir($dir, 0755, true);
    }

    // Сохраняем как WebP (качество 80)
    $result = imagewebp($image, $destination, 80);

    // Освобождаем память
    imagedestroy($image);

    return $result;
}

// Генерация тега <picture> для адаптивных изображений
function generatePictureTag($imageItem)
{
    if (empty($imageItem)) return '';

    $originalImagePath = $_SERVER['DOCUMENT_ROOT'] . $imageItem;
    $webpImagePath = preg_replace('/\.(jpg|jpeg|png|gif)$/i', '.webp', $originalImagePath);
    $webpImageUrl = preg_replace('/\.(jpg|jpeg|png|gif)$/i', '.webp', $imageItem);

    // Конвертируем в WebP только если файл ещё не существует
    if (!file_exists($webpImagePath)) {
        convertToWebP($originalImagePath, $webpImagePath);
    }

    // Формируем HTML
    if (file_exists($webpImagePath)) {
        $html = '<picture>';
        $html .= '<source srcset="' . $webpImageUrl . '" type="image/webp">';
        $html .= '<img src="' . $imageItem . '" alt="" loading="lazy" style="max-width:100%;height:auto;">';
        $html .= '</picture>';
    } else {
        $html = '<img src="' . $imageItem . '" alt="" loading="lazy" style="max-width:100%;height:auto;">';
    }

    return $html;
}

Файл: local/templates/your_template/components/bitrix/news.list/result_modifier/template.php (или в цикле элементов)
Код
<? foreach ($arResult["ITEMS"] as $arItem): ?>
    <div class="compare-tabs__panel">
        <div class="compare-images">
            <div class="compare-images__image">
                <?= generatePictureTag(CFile::GetPath($arItem['DISPLAY_PROPERTIES']['FOTO_BEFORE']['VALUE'])) ?>
            </div>
            <div class="compare-images__image">
                <?= generatePictureTag(CFile::GetPath($arItem['DISPLAY_PROPERTIES']['FOTO_AFTER']['VALUE'])) ?>
            </div>
        </div>
    </div>
<? endforeach; ?>

Этот код автоматически конвертирует изображения в современный формат WebP при первом обращении и генерирует адаптивный HTML с тегом <picture>, обеспечивая быструю загрузку и совместимость с любыми браузерами в системе 1С-Битрикс.
Страницы: 1
Ответить
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
 

Стоимость услуг по разработке и сопровождению сайтов на 1C-Битрикс

Разработка корпоративного сайта

от 7 дней

от 40 000 рублей

Разработка сайта без системы оплаты заказов через корзину

* стоимость зависит от наличия верстки, использования готового решения и т.д.

Разработка интернет-магазина с готовой версткой

от 4 недель

от 90 000 рублей

* указана минимальная стоимость. Стоимость выбранной лицензии «1С-Битрикс» оплачивается отдельно.

Техническая поддержка

выполняется с сайтами на основе любых CMS

от 5 000 рублей
Оптимизация производительности действующих интернет-проектов, наполнение и сопровождение, полная техническая поддержка и продвижение в поисковых сетях.

* стоимость зависит от объема и сложности выполняемых работ, используемой CMS.