сохранение изображения, изменение размера - PullRequest
1 голос
/ 24 сентября 2011

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

Да ... Во время загрузки вы создаете миниатюры ... и так далее ... Я знаю эту историю ... производительность и возможности хранения. Поэтому я сохраняю оригинал img, делаю 2 копии миниатюр, например, максимальная ширина 100 пикселей и максимальная 200 пикселей относительно отношения. Теперь мне нужно показать изображение с максимальной шириной 150px, поэтому я беру сохраненные img (200px) и .....

Я использую getimagesize () для вычисления показа ширины и высоты относительно соотношения, или я устанавливаю max-widht и max-height и оставляю это для браузера (браузер делает это для меня), или я устанавливаю ширину и сохраняю высоту: авто (но я также хочу ограничить максимальную высоту)

Так что на самом деле я использую php и getimagesize (), но эта функция каждый раз работает с файлом, и я немного напуган. Когда вы обрабатываете 1 img, все в порядке, но как насчет 20 или 100.

И ... еще одна идея, при загрузке я сохраняю в БД также информацию о размере, для этого мне нужно сохранить данные для 3 img (теперь только оригинал), это все усложнит.

Итак ... есть идеи? Какова ваша практика? THX.

Ответы [ 2 ]

1 голос
/ 24 сентября 2011

Мой подход

Я написал довольно простое приложение для галереи в php некоторое время назад, и вот как оно работает:

Изображения хранятся в папке с подпапками, представляющими альбомы (и подальбомы).Они загружаются через FTP, и веб-сервер имеет только права на чтение.

Для каждого изображения существует три версии:

  • полная (оригинал)
  • «средний» (максимум 1024x768px)
  • «большой» (максимум 250x250px)

Все запросы браузера на изображения обслуживаются php, а не -еще существующие версии создаются на лету.Фактические данные подаются через X-Sendfile, но это деталь реализации.

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

Мысли о вашей проблеме

Масштабирование изображений с использованием HTML / CSSсчитается плохой практикой по двум простым причинам: если вы увеличиваете масштаб, у вас есть размытое изображение.Если вы уменьшаете масштаб, вы теряете пропускную способность и замедляете свою страницу без веской причины.Так что не делайте этого.

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

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

Уменьшение больших изображений - довольно медленная операция (обычно занимает несколько секунд).Возможно, вы захотите ограничить его каким-либо образом, чтобы предотвратить злоупотребление / DoS.Также ограничьте размеры и размер файла.JPG в 100 Мп (или даже больше) в виде простого белого (или любого цвета) может быть очень маленьким при сжатии, но при масштабировании будет использовать очень много оперативной памяти.Кроме того, большие PNG-файлы очень долго распаковываются (и даже больше, чтобы сжиматься).

Для небольшого веб-сайта не имеет значения, какой подход вы выберете.То, что работает (даже если не масштабируется), подойдет.Если вы планируете получать хороший объем трафика и постоянный поток загрузок, тогда выбирайте мудро и тщательно оценивайте.

1 голос
/ 24 сентября 2011

Максимум два изображения: достаточно эскиза и исходного изображения.Убедитесь, что ваша страница загрузки надежно защищена, потому что я видел, как веб-сайт был заблокирован из-за DoS (злоупотребляя незащищенной страницей с изменением размера изображения).Также ограничьте максимальный размер загрузки, чтобы предотвратить злоупотребления.

Вы можете использовать свойства CSS max-width и max-height, чтобы ограничить размер ваших изображений.

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