Встала задачка: на собственном сайте, уменьшить размер превьюшек картинок у анонсов раздела дизайн. Само собой, перезаливать все картинки и лень и долго и глупо. Можно воспользоваться стандартной функцией битрикс CFile::ResizeImage и изменить размеры картинок на лету.
Для того, чтобы отресайзерить уже загруженные изображения в нужном месте шаблона компонента, вставляем:
<?
$renderImage = CFile::ResizeImageGet(
$arItem["PREVIEW_PICTURE"],
Array("width" => НОВАЯ_ШИРИНА, "height" => НОВАЯ_ВЫСОТА),
BX_RESIZE_IMAGE_EXACT, false
);
echo '<img alt="'.$arItem["NAME"].'" src="'.$renderImage["src"].'" />';
?>
Параметры масштабирования и обрезки можно установить такими переменными
- BX_RESIZE_IMAGE_EXACT - масштабирует в прямоугольник $arSize c сохранением пропорций, обрезая лишнее (в примере выше именно оно);
- BX_RESIZE_IMAGE_PROPORTIONAL - масштабирует с сохранением пропорций, размер ограничивается $arSize;
- BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабирует с сохранением пропорций за ширину при этом принимается максимальное значение из высоты/ширины, размер ограничивается $arSize, улучшенная обработка вертикальных картинок.
Вот и все. В итоге новые, отресайзенные картинки попадут в папку /upload/resize_images и сами применятся в шаблоне.
Поддержать выпуски видео уроков, поблагодарить за полезную инструкцию или заметку можно через:
Юманей
Цитата |
---|
Александр написал: Здравствуйте Михаил! а есть у Вас решение сделать в bitrix увеличить фото по клику, как на официальном сайте bitrix http://www.1c-bitrix.ru/products/cms/index.php С уважением |
что только не пробовал..
в корзине путь к картинки идет - /upload/resize_cache/iblock/e72/110_110_1/e725ae01607c4b21b1
в детальной карточке - /upload/iblock/e7b/e7bc22e91cd29476877ec0137f9adc0d.jpg - нет /resize_cache/
нужно сделать везде как в карточки.
Код |
---|
$arFile = CFile::GetFileArray($arItem['PREVIEW_PICTURE']['ID']; $imgWidth = $imgHeight = 260; $arrImage = CFile::ResizeImageGet( $arFile, array("width" => $imgWidth, "height" => $imgHeight), BX_RESIZE_IMAGE_EXACT, true, array("name" => "sharpen", "precision" => 100),//array(),//$arFilter false, 100 ); |
Если используется эта функция имеет смысл использовать сервис Optipic ?

Цитата |
---|
Макс Терещенко написал: Добрый день Если используется эта функция имеет смысл использовать сервис Optipic ? |
Но я от сервиса отказался, он мне визуально много картинок подпортил.
Столкнулся со следующей проблемой.
Есть задача вывести несколько изображений в детальной новости. Для этого дела используем fotorama.
Так как изображений несколько, чтобы страница быстрее грузилась, мы для изображений делаем миниатюры. Делаются миниатюры с помощью Битрикс'овой функции ResizeImageGet.
Всё почти-что здорово работает, но иногда на некоторых страницах при первой загрузке выводится вместо первой большой картинки на весь экран, маленькая. Отресайзенная (оу щит, сори за такой слэнг) до размеров которые мы задали ранее. Хотя по логике должна выводится большая и далее миниатюры.
Что я делаю не так?
Вот, код всего этого действа
Код |
---|
<div class="col-12 p-0 fotorama" data-nav="thumbs" data-thumbwidth="250" data-thumbheight="141" data-allowfullscreen="true"> <? // additional photos if(count($arResult["MORE_PHOTO"])>0):?> <?foreach($arResult["MORE_PHOTO"] as $PHOTO):?> <? $file = CFile::ResizeImageGet($PHOTO, array('width'=>'250', 'height'=>'141'), BX_RESIZE_IMAGE_EXACT, true); ?> <a href="<?=$PHOTO["SRC"]?>"> <img border="0" src="<?=$file["src"]?>" alt="<?=$arResult["NAME"]?>" title="<?=$arResult["NAME"]?>" /> </a> <?endforeach?> <?endif?> </div> |

Цитата |
---|
Алексей Клёнин написал: Добрый день. Столкнулся со следующей проблемой. Всё почти-что здорово работает, но иногда на некоторых страницах при первой загрузке выводится вместо первой большой картинки на весь экран, маленькая. Отресайзенная (оу щит, сори за такой слэнг) до размеров которые мы задали ранее. Хотя по логике должна выводится большая и далее миниатюры. |


Цитата |
---|
Александр Коваленко написал: И так получается после каждого обновления будут создаваться новые картинки, а старые, такие же, просто неконтролируемо заполнять место на сервере. |
Если обновится исходная, то создастся новая копия. Старые удалятся если сбросите кеш сайта.