【问题标题】:Automatically serving @2x and @3x images using ImageResizer on MVC在 MVC 中使用 Image Resizer 自动提供 @2x 和 @3x 图像
【发布时间】:2016-10-20 07:37:22
【问题描述】:

我们正在构建 websties 的主题在前端使用 Retina.Js,它会自动尝试根据用户设备加载 @2x 和 @3x 图像;

如果我们使用图像大小调整器为桌面提供滑块,如下所示;

/Images/home/slides/slide-1.jpg?width=300

(其中1为图片的DbId)

如果访问者使用高 dpi 移动设备,此脚本会自动请求以下图像;

/Images/home/slides/slide-1@2x.jpg?width=300

/Images/home/slides/slide-1@3x.jpg?width=300

我们正在使用 ImageResizer 和 SqlReader 和 DiskCache 插件,以便从数据库中读取图像并缓存在磁盘上。

当脚本从服务器请求@2x 和@3x 命名对流图像时,ImageResizer 当然会为这些图像返回错误,因为它在数据库中找不到 id 为 '1@2x' 的图像,但幸运的是我们能够通过使用 Pipeline.Rewrite 克服这个障碍;

ImageResizer.Configuration.Config.Current.Pipeline.Rewrite += delegate (IHttpModule s, HttpContext context, ImageResizer.Configuration.IUrlEventArgs ev)
        {

            if (ev.VirtualPath.StartsWith(VirtualPathUtility.ToAbsolute("~/kitimages/"), StringComparison.OrdinalIgnoreCase))
            {
                if (ev.VirtualPath.Contains("@2x"))
                {
                    ev.VirtualPath = ev.VirtualPath.Replace("@2x", string.Empty);
                }

            }                

        };

现在我们可以提供桌面分辨率为@2x(或@3x)的图像。

但是我们无法实现@2x 或@3x 图像的更改分辨率。由于我们使用查询字符串参数调用图像'?width = 300',这些图像也用作桌面分辨率。

我们试图改变

ImageResizer.Configuration.Config.Current.Pipeline.ModifiedQueryString["width"] 

到新计算的没有影响的值。

下为宽度设置新值
context.Items["resizer.modifiedQueryString"] 

无效的属性。

还尝试使用以下方法,但没有成功;

ImageResizer.Configuration.Config.Current.Pipeline.Modify( new ResizeSettings() { Width = 600 } );
ImageResizer.Configuration.Config.Current.CurrentImageBuilder.SettingsModifier.Modify(new ResizeSettings() {Width = 600});
ImageResizer.Configuration.Config.Current.Pipeline.GetImageBuilder().SettingsModifier.Modify(new ResizeSettings() { Width = 600 });

现在的问题是;在使用 SqlReader 和 DiskCache 插件并以正确的分辨率提供 @2x 和 @3x 图像时,有什么方法可以即时更改调整大小设置?

提前致谢,

【问题讨论】:

    标签: c# asp.net-mvc imageresizer retina.js imageresizer-diskcache


    【解决方案1】:

    ImageResizer 提供了一个 zoom 参数,可以为您计算,本质上是将宽度和高度参数相乘。

    ev.QueryString["zoom"] = 2; // 3, etc, 
    

    【讨论】:

    • 这个答案现在在 VLQ 队列中。我认为它确实回答了这个问题,但您可能需要添加一点解释。
    • 感谢您的指导,这正是我们努力实现的目标。
    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 2020-10-09
    • 2014-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多