C# 在MVC上使用ImageResizer自动提供@2x和@3x图像

C# 在MVC上使用ImageResizer自动提供@2x和@3x图像,c#,asp.net-mvc,imageresizer,retina.js,imageresizer-diskcache,C#,Asp.net Mvc,Imageresizer,Retina.js,Imageresizer Diskcache,我们正在构建网站的主题在前端使用Retina.Js,它会自动尝试根据用户设备加载@2x和@3x图像,方式如下: 如果我们使用图像大小调整器为桌面提供滑块,如下所示 /图像/主页/幻灯片/幻灯片-1.jpg?宽度=300 其中1是图像的DbId 如果访问者正在使用高dpi移动设备,此脚本将自动请求以下图像 /图像/主页/幻灯片/幻灯片-1@2x.jpg?宽度=300 /图像/主页/幻灯片/幻灯片-1@3x.jpg?宽度=300 我们将ImageResizer与SqlReader和DiskCache

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

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

/图像/主页/幻灯片/幻灯片-1.jpg?宽度=300

其中1是图像的DbId

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

/图像/主页/幻灯片/幻灯片-1@2x.jpg?宽度=300

/图像/主页/幻灯片/幻灯片-1@3x.jpg?宽度=300

我们将ImageResizer与SqlReader和DiskCache插件一起使用,以便从数据库读取图像并将其缓存在磁盘上

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

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的图像or@3x以这种方式在桌面上显示分辨率

但我们无法实现的是@2x或@3x图像分辨率的改变。由于我们使用querystring参数调用图像“?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图像时,是否有任何方法可以动态更改大小设置

提前感谢,

ImageResizer提供了一个缩放参数,可以为您进行计算,基本上是将宽度和高度参数相乘

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

这个答案现在在VLQ队列中。我想它确实回答了这个问题,但你可能想补充一点解释。谢谢你的指导,这正是我们试图实现的。