Sitecore: предоставление изображений с низким разрешением клиентам с низкой пропускной способностью - PullRequest
2 голосов
/ 08 сентября 2011

Я ищу простой способ показа изображений с низким разрешением в мобильных браузерах.Я хотел бы генерировать эти изображения низкого качества на лету и сохранять их в медиа-кэше для использования аналогичными браузерами.Есть идеи относительно хорошей реализации этого?(Примечание: у нас есть тэги sc: image по всему сайту, и я хочу избежать их изменения.)

1 Ответ

4 голосов
/ 08 сентября 2011

Правильно, интересный вопрос! Давайте разделим это на две проблемы, которые вам нужно решить: генерация изображений низкого качества и кэширование.

Изображения низкого качества

Для этого я бы посмотрел на добавление нового процессора в конвейер getMediaStream. Этот процессор может проверять UserAgent во входящем запросе и соответствующим образом пересчитывать изображение. Например, если он определяет, что браузер является стандартным настольным браузером, он ничего не будет делать, но если это мобильный браузер, он возьмет поток изображения и создаст новый с повторно преобразованным изображением.

Взгляните на этот пример , который показывает, как вы можете добавить свой собственный процессор в конвейер. Также вы можете подумать о Sitecore.Resources.Media.ResizeProcessor, чтобы узнать, как это сделать.

Кэширование

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

Я бы посмотрел на расширение обработчика для обработки изображений, переопределение метода ProcessRequest и получение текущих MediaOptions для запроса. В этот момент вы можете идентифицировать браузер (используя аналогичный код для первой части, вы можете поделиться этой логикой), а если это мобильный браузер, вы можете вставить что-то в словарь MediaOptions, например, "Мобильный": "1". Затем вы просто вызовете метод base.ProcessRequest и продолжите стандартный процесс.

На этой странице показан пример расширения MediaRequestHandler.

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

...