Подсистема изображений обеспечивает формирование миниатюр из оригиналов. Ссылки на миниатюры изображений формируются в коде по определенному алгоритму, при этом файлы уменьшенных изображений не создаются сразу. Файлы миниатюр создаются единожды, во время первого запроса изображений браузером. Так как в системе хранятся оригиналы изображений, в шаблоне можно в любое время получить ссылку на миниатюру любого размера и типа масштабирования.
Классы подсистемы изображений располагаются в пространстве имен RS::Img.
Класс RS::Img::Core обеспечивает низкоуровневую работу с изображениями. Конструктору класса необходимо сообщить пути к папкам, в которых располагаются оригиналы и миниатюры изображений.
С помощью метода getImageUrl можно получить ссылку на миниатюру.
За то, какая часть изображения попадет в миниатюру отвечает параметр - тип масштабирования. Классы, отвечающие за масштабирование располагаются в пространстве имен RS::Img::Type.
В ReadyScript имеются следующие классы масштабирования:
Класс | Краткий идентификатор | Описание | Пример |
---|---|---|---|
RS::Img::Type::Xy | xy | Изображение масштабируется с сохранением оригинальных пропорций. Итоговое изображение не может привышать размер ни по одной из осей. Соответственно, итоговое изображение, может оказаться меньше по одной из осей. | |
RS::Img::Type::Cxy | cxy | CropXY. Изображение масштабируется в 2 шага. На первом шаге, изображение масштабируется с учетом исходных пропорций. На втором шаге выбирается запрошенная область из центра изображения. | |
RS::Img::Type::Axy | axy | AbsoluteXY. Изображение масштабируется в 2 шага. На первом шаге, изображение масштабируется по типу XY. На втором шаге изображение центрируется и по краям добавляются белые полосы, если это необходимо. Итоговое изображение всегда точно соответствует запрошенным размерам. | |
RS::Img::Type::Cty | cty | Crop Top Y. Масштабирует изображение с учетом пропорций, возвращает верхнюю часть изображения. Подходит для создания миниатюр фото с лицами. | |
RS::Img::Type::Ccty | ccty | Crop Center Top Y. Масштабирует изображение с учетом пропорций. Запрошенное изображение ищется в центре исходного только по горизонтали. Итоговое изображение всегда будет запрошенного размера. |
Для генерации изображения необходимо создать контроллер, который будет откливаться на URL картинки, в случае если файла с изображением не существует. В ReadyScript имеется базовый абстрактный класс для таких контроллеров RS::Img::Handler::AbstractHandler, в которм уже все предусмотрено и остается только указать пути к папкам с оригиналами изображений и миниатюрами.
Пример:
Чтобы данный контроллер отзывался на запрошенный URL, необходимо добавить маршрт в систему.
Для создания миниатюр внутри контроллера используется метод RS::Img::Core::toOutput(), который в свою очередь вызывает метод RS::Img::Core::buildImage(), а затем отправляет созданный файл на вывод.
Модуль Фотографии, предоставляет более высокий уровень абстракции работы с изображениями. Модуль предоставляет готовый блок управления фотографиями, привязанными к объекту, для удобной вставки на страницы административной части. Готовые API для загрузки, удаления, выборки фотографий для объектов.
Модуль называется photo, соответственно все его файлы находятся в каталоге /modules/photo/, а все классы в пространстве имен Photo. Оригиналы изображений у модуля Photo хранятся в папке /storage/photo/original.
Миниатюры изображений хранятся в папке /storage/photo/resized
Для привязки фото к объекту используется 2 параметра:
Для вставки блока добавления/изменения фото у какого-либо объекта в панели администратора достаточно в шаблоне с формой этого объекта добавить следующую конструкцию:
В результате, в панели администратора появится полноценный блок с возможностью мультизагрузки, удаления, поворота изображений, установки подписей.
Для выборки фотографий какого-либо объекта, можно воспользоваться классом Photo::Model::PhotoApi.
Для добавления фотографий к объекту из PHP API, есть метод addFromUrl. Метод принимает следующие аргументы: