PHP Image Optimizer - PullRequest
       1

PHP Image Optimizer

4 голосов
/ 08 июля 2011

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

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

Ответы [ 2 ]

11 голосов
/ 08 июля 2011
  1. Не хранить изображения в БД, хранить их в файловой системе (как настоящие файлы).Возможно, вам потребуется хранить информацию о них в БД, хотя, например, имя файла, время загрузки, размер, владелец и т. Д.
  2. Имена файлов должны быть уникальными.Вы можете использовать yyyymmddhhiissnnnn, где yyyymmdd - год, месяц и дата, hhiiss - часы, минуты и секунды, nnnn - номер изображения в этой секунде, т. Е. 0001 для первого изображения, 0002 для второго изображения и т. д. Это даст вам уникальные имена файлов с точным упорядочением.
  3. Подумайте о создании логической структуры каталогов.Хранить миллионы изображений в одной папке не очень хорошая идея, поэтому вам понадобится что-то вроде images/<x>/<y>/<z>/<filename>.Это также может быть использовано на нескольких серверах.
  4. Сохранить оригинальные изображения.Вы никогда не знаете, что вы захотите делать с изображениями через год или два.Вы можете преобразовать их в какой-то общий формат, то есть, если вы разрешите загружать JPG, PNG и другие форматы, вы можете сохранить их все как JPG.
  5. Создавать и хранить все виды изображений с измененным размером, которые необходимына вашем сайте.Например, социальные сети часто имеют 3 вида изображений с измененным размером - один для отображения с комментариями пользователей в разных местах (очень маленький), один для отображения на странице профиля (довольно маленький, но не похожий на значок; может быть около 240x320 пикселей) и одиндля просмотра в натуральную величину (часто меньше оригинала).Имена файлов этих связанных изображений должны быть похожи на имена файлов исходных изображений, например, суффиксы _icon, _profile и _full могут быть добавлены к именам файлов исходных изображений.В зависимости от ваших ресурсов и количества одновременно загружаемых изображений, вы можете сделать это либо в режиме реального времени (в том же HTTP-запросе), либо использовать некоторую фоновую обработку (задание cron, которое постоянно проверяет, есть ли новые изображения дляпреобразуется).

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

2 голосов
/ 21 ноября 2011

Все хорошие предложения от binaryLV выше.Добавляя к его предложению №5, вы также, вероятно, захотите оптимизировать созданные вами эскизы.Когда изображения загружены, они могут иметь метаданные, которые не нужны для миниатюр.Вы можете без потерь удалить метаданные, чтобы уменьшить размеры миниатюр, как предлагается здесь: http://code.google.com/speed/page-speed/docs/payload.html#CompressImages. Я лично использую jpegtran на изображениях для своего веб-сайта, чтобы автоматически оптимизировать мои миниатюры при их создании.Если вам когда-либо понадобятся метаданные, вы можете получить их из исходного изображения.

Еще один вопрос, который следует учитывать, если вы планируете отображать эти изображения для пользователей, это разместить ваши изображения в домене или поддомене без файлов cookie.как упомянуто здесь: http://developer.yahoo.com/performance/rules.html#cookie_free. Если изображения размещены в домене или поддомене, в котором есть файлы cookie, то каждое изображение будет отправлять вместе с ненужным файлом cookie.Он может сэкономить несколько КБ на каждое запрошенное изображение, что может составить приличную сумму, особенно при подключении с ограниченной пропускной способностью, например на мобильном устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...