Довольно часто размеры изображений на сайте требуется изменять в связи с необходимостью представления их в публичной части сайта в нужном виде. По этой причине бывает не всегда удобно править все изображения, которые находятся на сайте, особенно когда их прилично много.
Целесообразно выполнять манипуляцию с изображениями программно. Однако изменение размеров изображения требует некоторых аппаратных ресурсов. В свою очередь может повлиять на ожидании получения изображения пользователем. Решением этой проблемы стало хранение однажды сжатого изображения в отведенном каталоге. Повторно уже сжимать изображение не придется, а лишь достать его по нужному пути с хранилища.
Для изменения размеров изображений в системе 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, в случае отсутствия исходного изображения, картинка будет заменяться изображением-заглушкой. Первое обращение к скрипту таким образом создаст миниатюры для всех элементов вернет результат с миниатюрами, повторное обращение уже будет ответ с миниатюрами из папки кэша.