Масштабирование изображений позволяет получать нужный размер изображения из исходного, путем сжатия изображения на стороне сервера, либо средствами браузера. Сжимая изображение средствами браузера, мы имеем существенные недостатки, это то, что файл изображения передается в исходном виде, кроме всего прочего мы создаем дополнительную нагрузку для браузера, чтобы тот в свою очередь просчитал масштабы, прежде чем показывать его. Теперь поговорим об альтернативном, на мой взгляд, методе масштабирования изображений.
Сжимать изображения до нужных размеров более рационально на стороне сервера, удобство в том, что передаваться пользователю будет изображение нужных размеров, а это значит, меньше времени на передачу файлов, а так же меньше нагрузка на браузер пользователя. Кроме всего прочего, миниатюры можно создавать динамически, без каких-либо дополнительных манипуляций вами при загрузке изображения на сервер. Загружаемые изображения могут иметь разные соотношения сторон, поэтому миниатюры так же можно центрировать по вертикали в пределах блока. Согласитесь весьма удобно.
Так как речь идет о масштабировании изображений в системе Bitrix, то для этих целей в системе предусмотрен специальный метод ResizeImageGet, который является методом класса CFile.
Немного о работе данного метода. Данный метод создает миниатюру изображения указанных размеров, и размещает их в директорию /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 );
Параметры:
Метод возвращает массив вида:
array( 'src', // путь к уменьшенной картинке относительно корня сайта. 'width', // Если bInitSizes = true ширина уменьшенной картинки, иначе 0. 'height', // Если bInitSizes = true высота уменьшенной картинки, иначе 0. )
Пример:
<? $rsUser = CUser::GetByID($arResult["User"]["ID"]); $arUser = $rsUser->Fetch(); $arImg = CFile::ResizeImageGet( $arUser["PERSONAL_PHOTO"], array('width' => 60, 'height' => 60), BX_RESIZE_IMAGE_PROPORTIONAL_ALT, true ); ?> <a href="#"> <img src="<?=$arImg["src"]?>" width="<?=$arImg['width']?>" height="<?=$arImg['height']?>" /> </a>