Помощник для работы с изображениями в Битрикс.
Библиотека включает в себя два основных класса для работы: ImageResize и ImageResizeCollection. Первый работает с одиночным изображением, второй с коллекцией.
Оба класса конфигурируются при помощи класса настроек ImageSettings.
Классы при вызове метода resize() возвращают массив, который содержит ссылку на изображение/изображения заданных в настройках размеров, размеры изображения, base64 представление изображения.
Кроме заданного размерами изображения может генерироваться его заглушка, если вы вдруг хотите использовать lazyload загрузку изображений.
Для начала работы нужно создать экземпляр класса настроек для ресайзинга изображений ImageSettings Экземпляр можно создать следующим образоом:
$imageSettings = ImageSettings::withSize("500x500")
->setHolderSize("16x16")
->setBlur(false)
->setResizeType(ImageResizeTypes::PROPORTIONAL_ALT)
В этом примере мы установили для выходного изображения размеры 500x500, установили размер для заглушки 16x16 (заглушка это изображение, которое вы можете вставить, когда пользуетесь LazyLoad, чтобы сначала загрузилась маленькая картинка, а затем когда нужно подгрузится большая. Методом setBlur(false) мы отключили блюр у миниатюры. Метод setResizeType(ImageResizeTypes::PROPORTIONAL_ALT)устанавливает тип масштабирования ссылка.
Далее передадим id изображения и настройки класс резайзер и вызовем метод resize()
$imageResize = ImageResize::init($id, $imageSettings)->resize();
Метод resize() вернет массив вида:
ORIGIN_IMAGE
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
IMAGE
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
HOLDER
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
Класс для того, чтобы уменьшить сразу несколько изображений
Например, у нас есть массив id изображений,например, 49057, 49056, нам нужно для каждого из этих id получить большое изображение и среднее:
$settingsLarge = ImageSettings::withSize("1024x768"); // Задаем настройки для большого изображения
$settingsMedium = ImageSettings::withSize("500x500"); // Задаем настройки для среднего изображения
$arCollection = ImageResizeCollection::byIds([49057, 49056])
->addSize("LARGE", $settingsLarge)
->addSize("MEDIUM", $settingsMedium)
->resize();
Метод resize() вернет массив вида:
49057
LARGE
ORIGIN_IMAGE
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
IMAGE
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
HOLDER
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
MEDIUM
ORIGIN_IMAGE
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
IMAGE
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
HOLDER
=>BASE64
=>SRC
=>WIDTH
=>HEIGHT
49056
...
ImageResizeTypes::CROP — Масштабирует в прямоугольник $size c сохранением пропорций, обрезая лишнее, аналог (BX_RESIZE_IMAGE_EXACT)
ImageResizeTypes::PROPORTIONAL — Масштабирует с сохранением пропорций, размер ограничивается $size, аналог (BX_RESIZE_IMAGE_PROPORTIONAL)
ImageResizeTypes::PROPORTIONAL_ALT — Масштабирует с сохранением пропорций за ширину при этом принимается максимальное значение из высоты/ширины, размер ограничивается $size, улучшенная обработка вертикальных картинок, аналог (BX_RESIZE_IMAGE_PROPORTIONAL_ALT);