Масштабування картинки як елемент типу Файл
У властивостях елемента Інфоблок ми створили властивість типу Файл, щоб прикріпити зображення, але воно йде без превью з масштабуванням. Сьогодні ми вирішимо цю проблему.
Користувач часто завантажує зображення 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']; ?>