2015-11-13 5 views
1

Я хочу, чтобы мои пользователи могли загружать изображения в определенных ограничениях по размеру, поэтому требуется обрезка. Теперь я нашел два плагина: jcrop, а другой - cropper; Jcrop использует подход на стороне сервера для обрезки изображений. Вот фрагмент из их документации:Обрезка на стороне сервера и обрезка на клиенте и отправка base64 строки?

Типичный рабочий процесс для обрезки функциональность в веб-приложении выглядит следующим образом:

Загрузить или выберите изображение, обрезать. Показать страницу с интерфейсом обрезки. Захват выбранных координат как значений формы При отправке формы. Сервер выполняет обработку изображения. Результирующая изображение сохраняется, заменяется, обновлены отображается, и т.д.

Хотя cropper использование HTML5 canvas, чтобы обрезать изображения на стороне клиента и отправить base64 строку на сервер, где сервер может декодировать его как изображение и сохранить его.

Мне лично нравится второй подход больше, так как я могу отправить строку внутри json, помогая мне избежать типа контента , я могу продолжить использовать тип контента application/json. Однако после прочтения jcrop-подхода я обеспокоен выполнением техники обрезки на стороне клиента. Какой подход даст лучшую производительность и охватит мобильные устройства? Каковы ограничения для каждого подхода, такие как максимальный размер файла и т. Д.

+0

Если вы поддерживаете мобильные устройства, вы можете предоставить мобильному пользователю сокращенную версию изображения, чтобы установить их кадрирующие координаты, а затем выполнить фактическое обрезку на сервере.Я предлагаю это как из-за меньшего размера экрана, так и из-за того, что производительность холста на мобильных устройствах намного меньше, чем на полностью оснащенном рабочем столе. – markE

ответ

4

Я не могу говорить о конкретных показателях производительности или размерах файлов, но я вполне уверен, что желаемый подход здесь будет иметь как клиент, так и сервер -side кадрирование, реализованный таким образом:

  1. Если клиент имеет возможность, обрезать его на стороне клиента
  2. клиент отправляет на сервер все, что он получил (обрезается, если в состоянии обрезать, неподрезано иначе)
  3. сервер проверяет, что он получил. Если размеры больше принятого, обрезайте его на стороне сервера.

Это потому, что, даже если вы решили реализовать только клиентскую версию, вы были бы глупым, чтобы верить, что вы никогда не получите несовместимые данные от ваших пользователей. Поскольку вы вынуждены этим фактом жизни сделать валидацию на стороне сервера в любом случае, это отличная возможность прозрачно обрезать большие изображения, обеспечивая соответствие, независимо от возможностей клиента.

Я бы не стал беспокоиться о производительности на стороне клиента. 1 или 2 секунды не реагирования при отправке изображения никого не убьют.

О максимальном размере файла также не является проблемой в этом подходе, поскольку вы гарантируете, что клиент отправит меньшую версию, которую он может отправить. Если он не может обрезать и изображение слишком велико, оно не сможет отправить его вам в любом случае.

+0

«Если размеры больше, чем принято, обведите его на сервер». Но это не будет таким же, как пользователь, обрезающий его. В этом случае мне нужно отправить координаты на сервер. – Shasak

+0

@ Касах я вижу. Тогда я предполагаю, что клиент никогда не отправит координаты, потому что всегда считается, что он будет обрезать. Тогда решение может быть сервером, выполняющим * изменение размера * вместо * обрезки *, которое не принимает координаты, и результат является довольно приемлемым, учитывая, что это ошибка клиента для отправки неправильных данных. Это изящное решение проблемы, которая должна произойти редко. –

Смежные вопросы