C# 在MVC上使用ImageResizer自动提供@2x和@3x图像
我们正在构建网站的主题在前端使用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中,但幸运的是,我们能够通过使用管道克服这个障碍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
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队列中。我想它确实回答了这个问题,但你可能想补充一点解释。谢谢你的指导,这正是我们试图实现的。