Primary:
- Асинхронная связь и передачу данных сервера с клиентом
- Масштабируемость веб-приложения
- Выбрать лицензию
- [ ]
Later:
- Предпросмотр результата в браузере
- Локальное хранилище на стороне клиента (cookie?)
- Домен
- [ ]
purpose::
"Программа автоматически генерирует коллаж с учётом пользовательских настроек."
user_settings::
- general
- img order by
- random
- name
- data
- importance
- custom
- (optional)
- base indent
- compactness
- layout settings
- img format
- img file type
- background fill color
- img order by
- (optional) each single img
- indent for each side
- importance (hierarchy)
- is frozen (for size and img quality)
- eclipse depth for each side (mostly for img with low importance, when maximum compactness)
- Упорядоченный - Неупорядоченный
(Есть ли порядок в расположении фотографий в коллаже?) - Форматированный - Произвольный
(Нужен ли коллаж определённого формата и размера?) - Компактный - Обособленный
(Насколько плотно фотографии будут располагаться?) - Исходный - Подогнанный
(Можно ли подгонять фотографии по размеру или обрезать?)
Приоритет ставится на Неупорядоченный, полу-Компактный, Подогнанный, Произвольный коллаж
- Пользователь вводит список файлов изображения.
Порядок сортировки файлов может быть не обозначен (по умолчанию ставится случайная выборка фотографий),
либо задан пользователем: сортировка по имени, по порядку ввода и т.д.
На основе введённых данных формируется сортированный по принципу пользователя список файлов. - Пользователь задаёт настройки для коллажа:
Соотношение границ, отступы от объектов, процент и границы заступов на фотографии, фон. - В соответствии с настройками выбирается алгоритм генерации коллажа
- Возврат результата
- Градация по размеру (Характеристика распределяет какие фотографии будут сохранять общий размер,
а какие фото можно будут уменьшить в соотношении с прочими) - Общий отступ (indent)
- Отступ (indent) для каждой стороны каждого элемента
- Процент заступа для каждой из сторон отдельного объекта
- Кучность объектов
- Формат конечного результата
Алгоритм выполняется через бинарные деревья, с поправкой на диагональную ось симметрии прямоугольника (т.к. большенство фотографий обладают подобной формой), потому дерево можно преобразить до бинарного, где каждая ветка является выбором между стороной корневого объекта, и смещением по краям от этой стороны.
Сортированный список разбивается на 2 по 2 части, в зависимости от ориентации конечного формата коллажа:
- Первая часть будет рассположена сверху-лево, с делением на чётность, нечётность
- Вторая часть будет рассположена снизу-право, с делением на чётность, нечётность
- Нормализация изображений
- Отступы для каждой из сторон
- Принцип кучности
- Принцип неизменности(frozen) изображений
- Алгоритм двумерной упаковка
- Определение размера коллажа
Одно изображение значительно больше другого
Нормализация входных данных на этапе подстановок в конечный результат
classDiagram
class SizeBox{
+height: int
+wight: int
}
class ImgObj{
+filepath: str
+filetype: str
+size: SizeBox
+convert_filetype(self, type_to: str)
}
class Layout{
<<ImgObj>>
+format: list[int]
+compact: float = 0
-__dunder_methods__()
}
class IndentArea{
+left
+down
+up
+right
-__init__()
-__call__(): list[int]
}
class SubFrame{
+cls.order: list[SubFrame]
-size: SizeBox
+indent: IndentArea
+importance: int
-__dunder_methods__(self, other)
-img_load_wrapper(self, func)
+load_metadata(self)
+img_insert_frame(self)
}
Layout "1" o-- "1..*" SubFrame
SubFrame o-- ImgObj
ImgObj "1" *-- "1" SizeBox
SubFrame "1" *-- "1" IndentArea
Layout "1" --|> "1" ImgObj