我正在寻找一种向移动浏览器提供低分辨率图像的简便方法。我想动态生成这些低质量的图像并将它们存储在媒体缓存中以供类似的浏览器使用。关于良好实施的任何想法? (注意:我们在整个网站上都有sc:image标签,我想避免更改这些标签。)
答案 0 :(得分:4)
对,有趣的问题!让我们把它分成两个你需要处理的问题:低质量的图像生成和缓存。
质量较低的图片
为此我会考虑在getMediaStream管道中添加一个新的处理器。此处理器可以检查传入请求的UserAgent并相应地重新采样图像。例如,如果它确定浏览器是标准桌面浏览器,则它将不执行任何操作,但如果它是移动浏览器,则它将采用图像流并创建具有重新采样图像的新图像流。
查看this example,了解如何将自己的处理器添加到管道中。您也可以在Sitecore.Resources.Media.ResizeProcessor上反思如何执行此操作。
<强>缓存强>
查看Sitecore媒体缓存的代码,它使用请求的当前MediaOptions为缓存生成唯一键。 MediaOptions有一个CustomOptions属性,它是一个字符串字典,你在其中添加的任何内容也将在哈希中用于创建密钥。
我会考虑扩展图像处理的处理程序,覆盖ProcessRequest方法并获取请求的当前MediaOptions。此时,您可以识别浏览器(使用第一部分的类似代码,您可以共享此逻辑),如果它是移动浏览器,您可以在MediaOptions的Dictionary中插入一些内容,例如: “手机”: “1”。然后你只需调用base.ProcessRequest方法,让标准过程继续。
This page显示了扩展MediaRequestHandler的示例。
希望有所帮助,我没有更详细地研究它,并且可能存在一些我忽略的潜在问题,但希望这足以让你开始。这是一些代码,但它似乎是一个很好的库,拥有大量的重用可能性,你不需要改变你网站上的标签。