CFile::ResizeImageGet — уменьшение изображений в 1С-Битрикс
Оптимизация изображений — один из самых простых и эффективных способов ускорить загрузку сайта. Чем меньше размер файлов, тем быстрее открываются страницы, что положительно влияет как на пользовательский опыт, так и на показатели Core Web Vitals.
В 1С-Битрикс для изменения размеров изображений предусмотрен встроенный метод
CFile::ResizeImageGet()
. Он автоматически создает уменьшенную копию исходного файла, сохраняет ее в кэш и при последующих запросах сразу возвращает готовое изображение без повторной обработки.
Именно поэтому использовать этот метод рекомендуется практически везде, где изображение выводится на сайте: в списках новостей, карточках товаров, баннерах, галереях и других разделах.
Использование CFile::ResizeImageGet()
Общий синтаксис метода выглядит следующим образом:
<?
$renderImg = CFile::ResizeImageGet(
ID_КАРТИНКИ,
[
"width" => 300,
"height" => 200
],
BX_RESIZE_IMAGE_PROPORTIONAL_ALT,
false
);
?>
<img src="<?=$renderImg["src"]?>" alt="">
Метод возвращает массив с информацией о созданной уменьшенной копии изображения. Для вывода картинки обычно используется значение $renderImg["src"].
Что можно передавать в ResizeImageGet()
В качестве первого параметра можно использовать не только ID файла. Чаще всего встречаются следующие варианты:
$arResult["PREVIEW_PICTURE"];$arResult["DETAIL_PICTURE"];- ID файла из свойства инфоблока;
- результат
CFile::GetFileArray().
Главное условие — изображение должно быть зарегистрировано в таблице b_file.
Типы масштабирования
Метод поддерживает несколько режимов изменения размеров изображения.
BX_RESIZE_IMAGE_EXACT
Изображение масштабируется строго под указанный размер. Если пропорции не совпадают, лишние части будут обрезаны.
Подходит для карточек товаров, превью новостей и других блоков, где все изображения должны иметь одинаковые размеры.
BX_RESIZE_IMAGE_PROPORTIONAL
Изображение уменьшается с сохранением пропорций. Размер никогда не превысит указанные ширину и высоту.
BX_RESIZE_IMAGE_PROPORTIONAL_ALT
На практике именно этот вариант использую чаще всего. Он корректнее работает с вертикальными изображениями, не обрезает фотографию и практически не портит композицию кадра.
Примеры использования
Вывод изображения в теге img
<?
$renderImg = CFile::ResizeImageGet(
$arResult["PREVIEW_PICTURE"],
[
"width" => 300,
"height" => 200
],
BX_RESIZE_IMAGE_PROPORTIONAL_ALT,
false
);
?>
<img src="<?=$renderImg["src"]?>" alt="<?=$arResult["NAME"]?>">
Использование в background-image
<?
$file = CFile::GetFileArray(
$arResult["DISPLAY_PROPERTIES"]["ATT_IMG"]["VALUE"]
);
$renderImg = CFile::ResizeImageGet(
$file,
[
"width" => 300,
"height" => 200
],
BX_RESIZE_IMAGE_PROPORTIONAL_ALT,
false
);
?>
<div style="background-image:url('<?=$renderImg["src"]?>')"></div>
Где хранятся уменьшенные изображения
После первого обращения к изображению Битрикс создает его уменьшенную копию и помещает ее в каталог:
/upload/resize_cache/
При последующих запросах система больше не выполняет изменение размеров, а сразу использует уже готовый файл из кэша. Благодаря этому обработка происходит только один раз.
Когда ResizeImageGet() не подойдет
Метод работает только с файлами, которые зарегистрированы в системе хранения файлов Битрикс. Если изображение находится на внешнем сервере, CDN или выводится по произвольному URL, воспользоваться CFile::ResizeImageGet() не получится.
Для таких случаев потребуется сначала получить файл в систему Битрикс либо использовать сторонние библиотеки обработки изображений.
Можно ли получить WebP
Сам по себе CFile::ResizeImageGet() изменяет только размеры изображения. Формат файла при этом остается прежним.
Если необходимо дополнительно уменьшить размер файлов, рекомендую использовать автоматическую конвертацию изображений в WebP или AVIF. Совместное использование ResizeImageGet() и современных форматов изображений позволяет добиться максимальной скорости загрузки сайта.
Метод CFile::ResizeImageGet() остается одним из самых полезных инструментов при разработке сайтов на 1С-Битрикс. Он позволяет автоматически создавать уменьшенные копии изображений, снижает нагрузку на сервер и избавляет от необходимости хранить несколько версий одной и той же картинки вручную.
Практически на каждом проекте имеет смысл выводить изображения именно через этот метод, а не использовать оригинальные файлы. Это положительно влияет как на скорость загрузки страниц, так и на общий объем передаваемых данных.
Комментарии
Будем рады вашему мнению и вопросам по статье.