Масштабування картинки як елемент типу Файл

У властивостях елемента Інфоблок ми створили властивість типу Файл, щоб прикріпити зображення, але воно йде без превью з масштабуванням. Сьогодні ми вирішимо цю проблему.

Користувач часто завантажує зображення 1-2Мб і шириною 2000-3000рх, тобто. прямо з фотоапарата, наприклад. У такому разі взагалі краще і велике фото урізати, але про нього не в цій статті. Сьогодні мова піде про прев'ю, щоб створити галерею або ще щось, щоб Відвідувач міг подивитися на всі фото в зменшеному розмірі.

Як це робиться.

Бітрікс має функцію, недоступну простому Адміністратору сайту у візуальному офомленні - CFile::ResizeImageGet. З її допомогою ми все й зробимо.

Заходимо в наш шаблон Інфоблоку, наприклад, news.list і в тому місці, де нам потрібно вивести прев'ю картинки, з тієї самої властивості типу Файл, вставляємо нашу функцію обробки:

152, 'height'=>207), BX_RESIZE_IMAGE_EXACT, true); $img = $file['src']; ?>

Щоб зрозуміти, як це працює, ця функція масштабує і копіює фото в директорію /upload/resize_cache/шлях/. Після створення ця функція вже працюватиме як висновок нашого прев'ю з директорії з прев'ю.

Решта, гадаю, зрозуміла. Задаємо потрібну ширину та висоту, у мене вони 152 і 207, далі йде параметр, який можна міняти на:

BX_RESIZE_IMAGE_EXACT - масштабує без збереження пропорцій, тобто. обрізає фото, але спочатку стисне його по найменшій стороні. Зручно, якщо потрібно вивести прев'ю однакового розміру. Саме це я використав у своєму прикладі.BX_RESIZE_IMAGE_PROPORTIONAL - масштабує із збереженням пропорцій;BX_RESIZE_IMAGE_PROPORTIONAL_ALT - масштабує зі збереженням пропорцій, покращено обробку вертикальних картинок.

Для масиву зображеньвикористовуємо наступний код:

157, 'height'=>207), BX_RESIZE_IMAGE_EXACT, true); $img1 = $file['src']; ?>