Довольно часто размеры изображений на сайте требуется изменять в связи с необходимостью представления их в публичной части сайта в нужном виде. По этой причине бывает не всегда удобно править все изображения, которые находятся на сайте, особенно когда их прилично много.
Целесообразно выполнять манипуляцию с изображениями программно. Однако изменение размеров изображения требует некоторых аппаратных ресурсов. В свою очередь может повлиять на ожидании получения изображения пользователем. Решением этой проблемы стало хранение однажды сжатого изображения в отведенном каталоге. Повторно уже сжимать изображение не придется, а лишь достать его по нужному пути с хранилища.
Для изменения размеров изображений в системе Bitrix существует метод CFile::ResizeImageGet(). Работает метод довольно просто, при первичном обращении к файлу уменьшает картинку до заданных размеров, далее сжатое изображение размещается в папку /upload/resize_cache/путь. Все последующие запросы при наличии готового файла не будут вызывать процесс сжатия, метод сразу вернёт путь к изображению.
array CFile::ResizeImageGet(
mixed file,
array arSize,
const resizeType = BX_RESIZE_IMAGE_PROPORTIONAL,
bool bInitSizes = false,
array arFilters = false,
bool bImmediate = false,
bool jpgQuality = false
);
Давайте рассмотрим пример использования метода. Предположим, что у нас есть некая переменная с массивом данных элементов $arResult[‘ITEMS’]. Стоит задача перебрать элементы массива, и создать для каждого элемента миниатюру изображения.
foreach ($arResult['ITEMS'] as $k => $v) {
if ($v['IMAGE']) {
$res = CFile::ResizeImageGet(
$v['IMAGE'],
array(
'width' => 50,
'height' => 50
),
BX_RESIZE_IMAGE_PROPORTIONAL
);
$arResult[$k]['IMAGE'] = $res['src'];
} else {
$arResult[$k]['IMAGE'] = '/bitrix/templates/.default/im/product-card-no-image-66x50.jpg';
}
}
В данном примере будут созданы миниатюры изображений размером 50x50px, в случае отсутствия исходного изображения, картинка будет заменяться изображением-заглушкой. Первое обращение к скрипту таким образом создаст миниатюры для всех элементов вернет результат с миниатюрами, повторное обращение уже будет ответ с миниатюрами из папки кэша.