Я недавно написал похожую систему. Общая идея была такой:
- Изображение загружено на сервер.
- Сервер сохраняет изображение со случайным уникальным идентификатором в некотором каталоге, делает запись в сеансе пользователя, сохраняя соответствующие данные и имя файла.
- На передней панели пользователь может выбирать между различными действиями, такими как «повернуть на 90 градусов против часовой стрелки», «применить ч / б фильтр» и т. Д.
- Эти действия отправляются на сервер через AJAX или POST, это не имеет значения.
Сервер добавляет эти «фильтры» в список, сохраненный в сеансе, который может выглядеть примерно так (упрощенно):
array(
'iuh98ho98p980' => array(
'file' => 'xyz.jpg',
'filters' => array(
0 => array('type' => 'rotate', 'degree' => 90),
1 => array('type' => 'grayscale')
...
Чтобы показать изображение пользователю, оно связано со специальным URL-адресом, например
<img src="outputimage.php?iuh98ho98p980" />
.
- Когда браузер запрашивает URL этого изображения, скрипт
outputimage.php
динамически генерирует изображение из исходного файла, применяя все фильтры.
- Изображение также может быть отрендерено отдельным рабочим потоком или, как только фильтр будет применен, что будет лучше.
Чтобы включить кэширование, каждый «вариант» изображения (изображение с применением определенных фильтров) идентифицируется хэшем его фильтров. Сгенерированный «вариант» сохраняется в каталоге кеша. Хеш также добавляется к URL-адресу, поэтому его можно также кэшировать на стороне браузера.
Надеюсь, что вы попадете на правильный путь, я оставлю детали реализации до вас.