Skip to content

Storage microservice with image crop based on Yii2

License

Notifications You must be signed in to change notification settings

larsnovikov/cdn

Repository files navigation

Хранилище изображений web-проекта(микросервис)


Быстрая установка

Чтобы максимально упростить разворачивание сервера был создан репозиторий: https://github.com/larsnovikov/docker-cdn2.

Хранение изображений

Исходные изображения

Все исходные изображения должны находиться в папке указанной в параметре 'inputPath' конфигурации. Рекомендуется примонтировать эту папку к Вашему основному Web-приложению и просто складывать в нее загруженные изображения.

Изображения водяных знаков

Все изображения водяных знаков должны находиться в папке указанной в параметре 'watermarkPath' конфигурации.

Готовые изображения

Готовые изображения должны попадать в хранилища. Хранилища - это директории находящиеся в папке указанной в параметре 'outputPath' конфигурации. Предполагается, что эти директории будут примонтированными жесткими дисками. Для сохранения изображения выбирается хранилище на котором больше свободного места.

Конфигурирование перед началом работы

    'config/template/cdn-local-tpl.php' => 'config/cdn-local.php'
    'config/template/db-local-tpl.php' => 'config/db-local.php' 

Скопируйте файлы из config/template в папку config как указано выше, заполните доступы к БД, список ip-адресов с которых разрешено принимать запросы и доступы к серверу AMQP чтобы обрабатывать изображения в фоне.

Примеры запросов

Список форматов

Отправлять запрос на URL image/get-formats

Добавление формата

Отправлять запрос на URL image/add-format
[
    'format' => json_encode([   
        'name' => 'min',
        'width' => 150, (1)
        'height' => 100, (1)
        'margins' => true, (2) 
        'background' => [
            'color' => '000' (3) 
        ],
        'optimize' => true, (4)
        'watermark' => [ (5)
            'image' => 'logo.png', (6)
            'width' => 50, 
            'height' => 50,
            'position' => 'pos_center' (7)
        ]
    ])
]
Примечания
(1): Размеры выходного изображения
(2): Метод обработки. true - добавлять поля, не обрезать изображение; false - не добавлять поля, обрезать изображения. (При false поля могут быть добавлены если необходимый размер изображения больше исходника. (Никогда не растягиваем исходники)).
(3): Цвет подложки. Именно этого цвета будут поля.
(4): Оптимизация изображения. true - прогнать изображение через jprgoptim после кропа, false - не прогонять. (Рекомендую всегда включать, т.к. это положительно сказывается в Google Page Speed).
(5): Водяные знаки.
(6): Картинка водяного знака. Должна лежать в папке указанной в параметре 'watermarkPath' конфигурации, быть PNG и с прозрачным фоном.
(7): Позиция водяного знака.
  • pos_top_left - сверху слева
  • pos_top_right - сверху справа
  • pos_bottom_left - снизу слева
  • pos_bottom_right - снизу справа
  • pos_center - прямо по центру

Удаление формата

Отправлять запрос на URL image/remove-format
[
    'name' => 'min' (1)
]
Примечания
(1): Имя формата, который надо удалить.

Пример запроса для кропа изображения

Отправлять запрос на URL image/upload
[
    'source' => 'image.jpg', (1) 
    'formats' => json_encode([ (2)
        'min',
        'max'
    ]),
    'queue' => true (3)
]
Примечания
(1): Исходное изображение. Должно лежать в папке указанной в параметре 'inputPath' конфигурации или быть ссылкой на изображение.
(2): Список форматов в которые необходимо преобразовать изображение.
(3): Способ обработки. true - обработка через очередь, false - обработка "в лоб".

Пример запроса для удаления изображения

Отправлять запрос на URL image/remove
[
    'source' => 'storage1/remove_me.jpg'(1)
]
Примечания
(1): Изображение для удаления. Должно лежать в папке указанной в параметре 'outputPath' конфигурации.