feat(web): правки применяются на фронте, фильтры в WASM
Новый алгоритм редактирования: обработка идёт только на клиенте. - Фильтры «Свет» считает WASM-модуль на Rust (frontend/wasm/light, 1.5 КБ): он строит тональные кривые и обрабатывает пиксели. При недоступности модуля используется JS-реализация с тем же результатом — расхождение проверяется тестом. - Просмотр рисует видимую область фото с правками на canvas поверх исходной версии, поэтому изменения видны сразу, без ожидания рендера. - Правки уходят на сервер не сразу: через десять секунд без изменений или при переключении фото. Сервер сохраняет параметры и готовит варианты сетки и полноразмерную версию в фоне, о готовности сообщает через SSE — клиент подтягивает готовую версию.
This commit is contained in:
@@ -294,6 +294,10 @@ SHALL храниться в метаданных фото, а отредакти
|
||||
- **WHEN** пользователь сохраняет правки фото
|
||||
- **THEN** параметры сохраняются в метаданных, отредактированная версия рендерится в фоне, а после рендера фото получает URL отредактированных вариантов
|
||||
|
||||
#### Scenario: Фоновая подготовка версий
|
||||
- **WHEN** правки фото сохранены
|
||||
- **THEN** система готовит варианты сетки и полноразмерную версию в фоне и сообщает о готовности
|
||||
|
||||
#### Scenario: Неразрушачность
|
||||
- **WHEN** фото отредактировано
|
||||
- **THEN** исходный объект и его варианты остаются неизменными
|
||||
@@ -309,13 +313,3 @@ SHALL храниться в метаданных фото, а отредакти
|
||||
#### Scenario: Редактирование видео
|
||||
- **WHEN** пользователь пытается отредактировать видео
|
||||
- **THEN** система отклоняет запрос
|
||||
|
||||
### Requirement: Рендер видимой области правки
|
||||
Для фото с правками просмотр SHALL получать изображение по запросу отдельной области:
|
||||
система SHALL рендерить только видимую часть кадра с применёнными правками, а не готовить
|
||||
полноразмерную отредактированную версию. Область SHALL задаваться относительными
|
||||
координатами, чтобы запрос не зависел от размера оригинала.
|
||||
|
||||
#### Scenario: Зум отредактированного фото
|
||||
- **WHEN** пользователь увеличивает фото с правками
|
||||
- **THEN** система отдаёт отрендеренную видимую область, не готовя полную версию
|
||||
|
||||
@@ -779,9 +779,14 @@ SHALL очищаться. При отсутствии сети приложен
|
||||
### Requirement: Вкладка «Редактирование»
|
||||
Правая панель фото SHALL содержать вкладку «Редактирование» с инструментом «Свет»:
|
||||
ползунки экспозиции, контраста, светов, теней, белых и чёрных, а также точечную кривую
|
||||
с выбором канала. Правки SHALL сохраняться без отдельной кнопки, а переключатель
|
||||
«Сброс» SHALL удалять параметры правок и отредактированную версию фото. Сетка и просмотр
|
||||
SHALL показывать отредактированную версию фото, когда она отрендерена.
|
||||
с выбором канала. Правки SHALL применяться к фото сразу и отправляться на сервер после
|
||||
десяти секунд без изменений либо при переключении фото. Переключатель «Сброс» SHALL
|
||||
удалять параметры правок и отредактированную версию фото. Сетка и просмотр SHALL
|
||||
показывать отредактированную версию фото, когда она отрендерена.
|
||||
|
||||
#### Scenario: Отложенная отправка
|
||||
- **WHEN** пользователь меняет ползунок и не трогает панель десять секунд
|
||||
- **THEN** правки отправляются на сервер, а сервер рендерит фото в фоне
|
||||
|
||||
#### Scenario: Вкладки панели
|
||||
- **WHEN** открыта правая панель фото
|
||||
@@ -791,10 +796,18 @@ SHALL показывать отредактированную версию фо
|
||||
- **WHEN** пользователь отпускает ползунок
|
||||
- **THEN** правки сохраняются, а после рендера фото в сетке и просмотре показывается отредактированная версия
|
||||
|
||||
#### Scenario: Правки видны сразу
|
||||
- **WHEN** пользователь меняет ползунок, а сервер ещё не отрендерил фото
|
||||
- **THEN** видимая область фото в просмотре показывает правки без ожидания рендера
|
||||
|
||||
#### Scenario: Фильтры считаются в браузере
|
||||
- **WHEN** браузер рисует предпросмотр правок
|
||||
- **THEN** фильтры применяются WASM-модулем, а при его недоступности — JavaScript-реализацией с тем же результатом
|
||||
|
||||
#### Scenario: Сброс правок
|
||||
- **WHEN** пользователь нажимает «Сброс» на вкладке «Редактирование»
|
||||
- **THEN** параметры правок и отредактированная версия фото удаляются, а фото возвращается к исходному виду
|
||||
|
||||
#### Scenario: Зум при правках
|
||||
- **WHEN** фото отредактировано, и пользователь увеличивает его
|
||||
- **THEN** просмотр показывает отрендеренную сервером видимую область, а зум не сбрасывается при обновлении фото
|
||||
- **THEN** браузер рисует видимую область с правками, пока сервер не отрендерил фото, а зум не сбрасывается при обновлении фото
|
||||
|
||||
Reference in New Issue
Block a user