1C-Битрикс: Управление сайтом

CFile::ResizeImageGet(с версии 7.1.1)

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
); 

Метод уменьшает картинку и размещает уменьшенную копию в папку /upload/resize_cache/путь. Один раз уменьшив изображение получаем физический файл, который позволяет при последующих обращениях не проводить операции по уменьшению изображения. При следующем вызове метод вернет путь к уменьшенному файлу. Статический метод.

Параметры

Параметр Описание С версии
file Идентификатор файла из таблицы b_file или массив описания файла (Array(FILE_NAME, SUBDIR, WIDTH, HEIGHT, CONTENT_TYPE)), полученный методом GetFileArray.
Size Массив в виде Array("width"=>WIDTH, "height"=>HEIGHT) со значениями ширины и высоты для уменьшаемой картинки. Оба ключа обязательны.
resizeType Тип масштабирования:
  • BX_RESIZE_IMAGE_EXACT - масштабирует в прямоугольник $arSize c сохранением пропорций, обрезая лишнее;
  • BX_RESIZE_IMAGE_PROPORTIONAL - масштабирует с сохранением пропорций, размер ограничивается $arSize;
  • BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций за ширину при этом принимается максимальное значение из высоты/ширины, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.
InitSizes Флаг возвращения в результирующем массив размеров измененной картинки. True - возвращает, false - нет
Filters Массив для постобработки картинки с помощью фильтров (Array("name" => "sharpen", "precision" => 15)). Фильтров пока один - sharpen. Задавать его не обязательно - будет инициализирован автоматом. Используется для наведения резкости у миниатюр. 10.0.4
Immediate Флаг передается в обработчик события OnBeforeResizeImage, по смыслу означает масштабирование непосредственно при вызове метода. Обработчик в принципе может выполнять отложенное масштабирование.12.0.10
jpgQuality Число, устанавливающее в процентах качество JPG при масштабировании. Чем больше значение, тем выше качество и больше размер файла изображения.12.5.0

Возвращаемое значение

Метод возвращает массив вида:

array(
    'src',  // путь к уменьшенной картинке относительно корня сайта.
    'width',  // Если bInitSizes = true ширина уменьшенной картинки, иначе 0.
    'height',  // Если bInitSizes = true высота уменьшенной картинки, иначе 0.
)

Примеры использования

//$uID - идентификатор пользователя
$uDBInfo = CUser::GetByID($uID);
if ($uInfo = $uDBInfo->GetNext())
{
            if ($uInfo['PERSONAL_PHOTO'])
            {
                $file = CFile::ResizeImageGet($uInfo['PERSONAL_PHOTO'], array('width'=>150, 'height'=>150), BX_RESIZE_IMAGE_PROPORTIONAL, true);                
                $img = '<img src="'.$file['src'].'" width="'.$file['width'].'" height="'.$file['height'].'" />';
                $uInfo['PERSONAL_PHOTO'] = $img;
            }
            $arResult['ITEMS'][$k]['USER_INFO'] = $uInfo;
}

Наложить водяной знак можно таким образом:

$arWaterMark = Array(
            array(
                "name" => "watermark",
                "position" => "bottomright", // Положение
                "type" => "image",
                "size" => "real",
                "file" => $_SERVER["DOCUMENT_ROOT"].'/upload/copy.png', // Путь к картинке
                "fill" => "exact",
            )
        );
        $arFileTmp = CFile::ResizeImageGet(
            $arElement["DETAIL_PICTURE"],
            array("width" => 250, "height" => 127),
            BX_RESIZE_IMAGE_EXACT,
            true,
            $arWaterMark
        );


Пользовательские комментарии

Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.

Добавлять комментарии могут только зарегистрированные пользователи. Сообщения для просмотра появляются после модерации.
0
diesel
Ещё один пример "динамическое масштабирование изображения средствами сервера"

Код
//получим параметры изображения
$arImgParamsM = CFile::_GetImgParams($arPicID, $iSizeWHTTP, $iSizeHHTTP);
$arSizes=ReturnSizes(180/* целевое ограничение, т.е. max (180x180) */,$arImgParamsM,true);//по параметрам изображения вернуть высоту, ширину и отступы

//сожмём средствами браузера, чтобы не передавать большой размер
$renderImage = CFile::ResizeImageGet($arPicID, Array("width" => $arSizes["MAIN_WIDTH"], "height" => $arSizes["MAIN_HEIGHT"]));


-----
ReturnSizes - не входит в поставку битрикс, собственная функция (легко пишется по вашим требованиям)
1
scifi
0
Savelov
1
Михаил
Ресайз и вывод дополнительных фотографий элементов (more_photo):
Код
<? if(count($arResult["MORE_PHOTO"])>0):?>    <?foreach($arResult["MORE_PHOTO"] as $PHOTO):?>        <? $file = CFile::ResizeImageGet($PHOTO, array('width'=>120, 'height'=>'120'), BX_RESIZE_IMAGE_EXACT, true); ?>        <a href="<?=$PHOTO["SRC"]?>" name="more_photo" target="_blank">        <img border="0" src="<?=$file["src"]?>" width="<?=$file["width"]?>" height="<?=$file["height"]?>" alt="<?=$arResult["NAME"]?>" title="<?=$arResult["NAME"]?>" /></a>   <?endforeach?><?endif?>  
1
Вячеслав Зыков
Если исходная картинка меньше, чем необходимо ужать, то в папку /upload/resize_cache/ ничего не попадает. Соответственно $file тоже пустой и картинка может не появляться. Приходится проверять попало ли что-то в массив:

Код
<?if(!isset($file['src'] ) ): $file[src]=путь к старой картинке; endif;?>
1
Александр Семеритов
Чтобы работал 'fill'=>'repeat', в параметрах не должно быть 'size'=>'real'
0
Александр Леонов
Для изменения размера watermark'а "fill" => "resize" и "coefficient" => число
0
nezhda
Случалось, что автоматически инициализируемый фильтр sharpen оставлял артефакты на PNG с прозрачностью. Чтобы избежать этого, можно задать precision равным нулю

Код
$arPhotoSmall = CFile::ResizeImageGet(
   $arElement["PREVIEW_PICTURE"]["ID"], 
   array(
      'width'=>100,
      'height'=>420
   ), 
   BX_RESIZE_IMAGE_PROPORTIONALDETAIL_PICTURE,
   Array(
      "name" => "sharpen", 
      "precision" => 0
   )
);
© «Битрикс», 2001-2016, «1C-Битрикс», 2016