Загрузить миниатюру изображения на сервер без загрузки всего изображения - PullRequest
4 голосов
/ 28 августа 2009

Насколько я знаю, то, что я здесь спрашиваю, невозможно, но я все равно хотел спросить, если что-то упущу.

Предположим, вы хотите разрешить пользователям загружать изображения JPG, и эти изображения масштабируются в меньшие значки, а исходные изображения всегда отбрасываются и больше не требуются. Есть ли способ, который обычно работает в большинстве современных браузеров, который позволил бы пользователю выбрать одно изображение на жестком диске, превратить ЛОКАЛЬНО в миниатюру и загрузить созданный эскиз на сервер?

В случае, когда серверу просто нужно маленькое изображение, было бы расточительно потратить как пользовательское время, так и ресурсы сервера, чтобы продолжить загрузку всего изображения, только чтобы сразу же отказаться от него. Было бы гораздо лучше просто масштабировать его на клиенте.

Я могу представить три варианта. Просто обычный HTML / Javascript, используя Flash или Java. Если бы это было возможно с Flash, это казалось бы лучшим вариантом. Но, читая документацию по flash.net.FileReference, кажется, что вы можете загрузить файл с HD, но вы не можете заглянуть внутрь файла, который вы загружаете. С другой стороны, если вы включите «доступ к локальным файлам» в параметрах публикации Flash, то, по-видимому, вы больше не сможете получить доступ к сети, так что это не сработает.

С помощью HTML / Javascript можно загружать изображения и отображать их на <canvas>, но если вы попытаетесь получить доступ к пикселям этих изображений, вы получите нарушения безопасности, так что, похоже, это не сработает.

Java Я не решаюсь использовать, потому что только 96,52% моих пользователей установили его, и диалоги загрузки файлов, которые я видел реализованными на Java (например, в Facebook), не работали должным образом (интерфейс без ответа). Интересно, если только Java - это единственное, что позволяет изменять размеры изображений с локального HD?

Ответы [ 5 ]

4 голосов
/ 30 августа 2009

"Если бы это было возможно с Flash, то Казалось бы, лучший вариант. "

Насколько я понимаю, это возможно с Flash Player 10.

Вот пример:

http://blog.kukiel.net/2009/02/file-manipulation-client-side-with.html

Flash Player 10 в настоящее время имеет общее проникновение на рынок около 85-90%, поэтому, если вы не решаетесь использовать Java, потому что он установлен только у 96,52% ваших пользователей, я думаю, вам не понадобится и Flash Player 10 ,

2 голосов
/ 28 августа 2009

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

JavaScript отсутствует, потому что JS не может ничего читать напрямую с клиента; он может только указывать браузеру загружать предварительно определенный локальный путь или загружать байты с сервера.

Песочница безопасности Flash также предотвращает это, как вы указали.

У Java другой набор проблем - в наши дни люди редко устанавливают апплеты, если только они не доверяют сайту больше, чем членам своей семьи. Также, очевидно, чрезвычайно сложно создать что-то надежное и , пригодное для использования, о чем свидетельствуют компании из Facebook, которые имеют практически неограниченные ресурсы для решения этой проблемы и до сих пор не могут.

Итак, в заключение - нет, и не слишком переживайте по этому поводу.

0 голосов
/ 05 июля 2010

Я думаю, что вы можете загрузить изображение на сервер, затем показать его в браузере, затем пользователь изменит его размер с помощью javascript, но не изменит размер, только захватит его координату, затем вы можете использовать координату для измените размер изображения на сервере, сохраните новое изображение (большой палец) и удалите оригинал.

0 голосов
/ 02 декабря 2009

Другой способ - использовать Google Gears, например: Gears Uploader .

0 голосов
/ 28 августа 2009

Если изображение в формате JPEG является прогрессивным, вы можете прекратить загрузку после получения определенного разрешения. Это потребует немного собственной обработки загрузчика jpeg и кода обработки http.

Это также довольно большое «IF», ​​так как большинство jpegs по умолчанию не являются прогрессивными.

...