2009-07-02 3 views
0

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

Должен ли я, чтобы пользователь обрезал изображение сразу после его загрузки?

Учитывая случайное изображение, как его масштабировать, чтобы он был ниже определенной высоты/ширины пикселя, не искажая изображения?

ответ

1

я использовал несколько различных приложений, чтобы сделать это:

  • sorl.thumbnail: достаточно простой интерфейс и делает свои метки для вас (что очень удобно в админке). Мне не нравятся, что размеры и характеристики изображения определяются в атрибуте модели, что создает загроможденный код и путает разделение дизайна и данных.
  • Photologue: Размеры изображений определяются администратором и хранятся в вашей базе данных. Это удобно. Загрузите zip-файлы в галереи. Много хорошего. Может быть, больше, чем вам нужно.
  • ImageKit: Следующая версия Photologue строится на этом. Это более низкий уровень, определяет характеристики изображения (размеры и процессоры) в файле спецификаций. Это не делает больше, чем нужно, но, похоже, делает достаточно.

Как я уже сказал, я использовал все три для разных проектов (в порядке, указанном, по совпадению). Похоже, что вы делаете, я бы пошел с Sorl или ImageKit.

+0

Спасибо за отличную информацию! – MikeN

+0

@MikeN С помощью какого приложения вы решили свою проблему? –

3

Я думаю, PythonMagick позволит вам сделать это. Это версия Python ImageMagick

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

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

2

Использование Django-Sorl, который даст вам теги, которые автоматически генерируют и кэшируют эскизы разных размеров, включая масштабирование и интеллектуальную обрезку. Я использую это, размещая файлы и миниатюры на локальном S3-mount, и он автоматически помещает все эскизы на место, где пользователи могут захватывать их с S3.

+0

+1. sorl-thumbnail - это фантастическое приложение, которое входит в каждый проект Django, который я делаю. –

1

Если Flash является опцией, то можно просмотреть изображение в Flash-ролике (используя класс FileReference), обрезать/изменить его размер, а затем закодировать изображение в желаемый формат изображения (есть некоторые кодировщики для PNG и JPEG в AS3 corelib package), затем загрузите его на сервер.

Примечание: Это может быть сделано только в Flash, 10.

Для получения дополнительной информации ознакомьтесь с http://labs.findsubstance.com/2008/04/03/as3-upload-encode-images/

5

Почему бы не использовать проект django-avatar?

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

На Filmaster мы также кэшируем аватары. Вы можете посмотреть здесь код тега шаблона: https://musielak.eu/public/film20/film20/userprofile/templatetags/avatars.py (пользователь: justlookingaround, pass: film @ ster).

1

... Flash ??? Поговорите о том, чтобы прогуляться по горам, чтобы пересечь пруд.

Python имеет библиотеку изображений, называемую PIL. Вы должны загрузить его самостоятельно, но это не намного проще, если вы не хотите, чтобы приложение, такое как django-avatar, позаботилось о некоторых дополнительных материалах для вас.

http://effbot.org/imagingbook/image.htm

Это серьезно так просто! Даже преобразование типов изображений так же просто, как один строковый аргумент метода «save».

+0

Важно отметить, что использование Flash нажимает загрузку процессора на загрузчик, тогда как каждый другой метод использует сервер. Он, вероятно, сохранит хороший кусок полосы пропускания, так как вы больше не принимаете прямо 11-мегапиксельные изображения для своих пользователей с целью получения изображений аватара. Это зависит от ваших потребностей. Facebook использовал Java-апплеты и Flash для этой конкретной цели, прежде чем они стали действительно огромными. –

+0

Справедливо, но это, честно говоря, не самый прямой ответ, который можно было бы дать любительскому программисту, спрашивающему о том, как изменить размер изображения. Нецелесообразно ожидать, что один человек будет хорошо знать, как программировать на 4-х языках, чтобы не иметь дыр в каждом из них. В наши дни Flash является чем-то вроде пуленепробиваемой, с точки зрения обвинений в безопасности. Я бы предпочел ответить на заданный вопрос. – Tim

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