лучшая практика создания миниатюр? - PullRequest
4 голосов
/ 16 мая 2011

Я создаю социальную сеть, в которую пользователи загружают свое изображение профиля.

Это изображение будет использоваться на странице их профиля в размере 150/150 пикселей.

На домашней странице, т.е. пользовательЛента активности Мне нужно, чтобы одно и то же изображение было размером 75/75 пикселей.

Как лучше всего это сделать

  1. Изменение размера изображения на лету (timthumb).
  2. Изменение размера и сохранение изображения на сервере.

Ответы [ 4 ]

3 голосов
/ 16 мая 2011

При загрузке фотографии создайте требуемый набор миниатюр и сохраните его как [image_name] thumb [size_name] .jpg или около того:

uploaded: file.jpg
medium: file_thumb_150x150.jpg
small: file_thumb_75x75.jpg

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

2 голосов
/ 19 мая 2011

Я немного поработал над этой проблемой и нашел 3 основных способа сделать это:

  1. Создание миниатюрных изображений в точке загрузки в качестве фонового процесса.
  2. Создание изображений по запросу с помощью основного приложения
  3. Создание изображений по запросу с использованием URL-адреса в качестве API

Каждый подход имеет свои плюсы и минусы.

  1. Этот подход является наиболее ограничительным, вы должны заранее знать все варианты использования и размеры миниатюр, чтобы их можно было генерировать сразу после загрузки.Основным преимуществом является то, что изображения могут эффективно обслуживаться с использованием сервера, такого как nginx, и они аналогичны любым другим статическим ресурсам.
  2. Django имеет библиотеку sorl-thumbnail, которая предоставляет тег шаблона для создания миниатюр всех видов.как и когда они нужны.Он использует быстрый ключ / хранилище значений для отслеживания того, какие миниатюры были сгенерированы, и автоматически делает недействительными устаревшие сгенерированные изображения, если обнаруживает, что исходное изображение было изменено.Затем тег шаблона возвращает URL для сгенерированного изображения, которое может быть передано непосредственно из nginx без прохождения слоя сценариев.Более гибкий, чем 1, но вы не можете (например) создать URL-адрес изображения с помощью JavaScript и ожидать, что он будет существовать, это должно быть сделано с помощью внутреннего кода или шаблонов веб-сайта.
  3. Полностью динамичный и гибкий,Вы можете получить любую версию изображения, которую хотите, просто изменив URL, Amazon использует этот метод, как и все эти веб-сайты для создания изображений-заполнителей.Может генерировать URL в JavaScript и делать все, что угодно.Самому веб-сайту не требуется знание уровня миниатюр, за исключением нескольких вспомогательных методов для создания URL-адресов для вас.НО, это, очевидно, самый ресурсоемкий способ работы, и вам нужно убедиться, что ваша архитектура справится с нагрузкой.Вам нужно использовать все приемы в книге, чтобы своевременно аннулировать кэши, избегать ненужных попаданий в скрипт изменения размера и т. Д.

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

0 голосов
/ 16 мая 2011

Если пространство на сервере и пропускная способность являются проблемой, вы должны рассмотреть использование cdn.

Амазонка имеет хороший сервис,

0 голосов
/ 16 мая 2011

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

...