Я портирую старый сайт электронной коммерции на MVC 3 и хотел бы воспользоваться улучшениями дизайна. В настоящее время на сайте имеются изображения продуктов, сохраненные в 3 размерах: миниатюра, средняя (для отображения в списке) и расширенная для увеличенного изображения. Прямо сейчас нам нужно загрузить 3 отдельных изображения, которые имеют правильный размер, предоставить 3 разных имени, которые соответствуют тому, что ожидает сайт, и т. Д., Это боль.
Я хотел бы загрузить только один файл, большой, а затем разрешить сайту уменьшить его до необходимых размеров, и мне бы хотелось, чтобы гибкость изменялась в зависимости от предпочтений пользователя, форм-фактора (например, для мобильных устройств, iPad) и размеров списка. , рабочий стол) и т. д., поэтому может потребоваться много копий одного и того же изображения. У меня вопрос: нужно ли уменьшать изображение, а затем сохранять его несколько раз при загрузке, и если да, то каково хорошее соглашение о хранении / именовании?
Другая идея состоит в том, чтобы сохранить только одно изображение, но изменить его размер программно, прежде чем передать его клиенту. Кто-нибудь сделал это и каковы компромиссы помимо нескольких машинных циклов? Как вы передаете временное изображение в памяти клиенту (там нет URL)?
ImageProcessor
Imageprocessor - это легкая расширяемая библиотека, написанная на C #, которая позволяет вам управлять изображениями на лету с помощью .NET
Изменение размера на лету:
ImageProcessor.Web стандартно поставляется с кэшированием . Любое обработанное изображение асинхронно кэшируется как в браузере, так и на сервере на любой срок. Кэш-память сервера разумно хранит миллионы изображений и автоматически обновляется в случае изменения исходного изображения или истечения срока действия кэша.
источник
Предполагая, что миниатюра представляет собой просто уменьшенную версию основного изображения, я думаю, что это должно быть сделано во время загрузки, но, возможно, запланировано как фоновое задание, чтобы не влиять на другие процессы. Если вы изменяете размер на лету, убедитесь, что вы кэшируете изображение.
Подвох во всем этом заключается в том, что лучший эскиз для некоторых изображений - это не простое изменение размера мастера; вам может понадобиться масштабировать и обрезать так, чтобы человек руководствовался. Вы могли бы хотеть к автоизменению вещи, но иметь механизм, который позволяет переопределять в этих конкретных случаях.
источник
Небольшое изменение в том, что упомянул Адам:
(1) создать пользовательскую страницу ошибки (правило для изображений)
(2) Структура имен файлов изображений должна быть:
Единственным исключением является исходное изображение, которое должно быть названо:
(3) При загрузке файла, например: 1245_Original -> все файлы с 1245_ * должны быть удалены
(4) Пользовательская страница ошибки (при условии, что 1245_Original Exists) должна динамически создавать запрошенный файл изображения, например:
а также подавать его в первый раз.
По сути, загрузка нового изображения очищает кэш.
источник