Как я могу перенаправить на изображение по умолчанию использовать WebImage в MVC
Я использую WebImage для изменения размера изображений:
[ImageOutputCache(Duration = 3000, Location = System.Web.UI.OutputCacheLocation.Client)]
public void GetPic(string fn, int? w, int? h)
{
try
{
if (w > 1920) { w = 1920; }
if (h > 1080) { h = 1080; }
WebImage wi = new WebImage(@"~/img/" + fn);
if (!h.HasValue)
{
Single ratio = (Single)wi.Width / (Single)wi.Height;
h = (int)Math.Ceiling(wi.Width / ratio);
}
wi
.Resize(w.Value + 1, h.Value + 1, true, true) // Resizing the image to 100x100 px on the fly...
.Crop(1, 1) // Cropping it to remove 1px border at top and left sides (bug in WebImage)
.Write();
}
catch
{
//new WebImage(@"~/img/default.jpg").Write();
//Redirect(@"~/img/default.jpg");
}
}
Я хочу использовать редирект на изображение по умолчанию вместо webimage.write (см. Раздел catch). как я могу это сделать
1 ответ
Что вы имеете в виду редирект? .Write() будет записывать в поток ответов напрямую.
В catch вы просто создадите экземпляр класса WebImage с изображением по умолчанию и.Write (). Это будет отображаться так же, как код внутри блока try.
Вот пример кода в терминах MVC. Для полноты я попытался передать содержимое байта. Надеюсь, это поможет
public ActionResult GetPic()
{
int? w = 500;
int? h = 500;
FileStreamResult fsr = null;
MemoryStream ms = null;
try
{
if (w > 200) { w = 200; }
if (h > 200) { h = 200; }
WebImage wi = new WebImage(@"C:\Temp\MyPic.JPG");
if (h.HasValue)
{
Single ratio = (Single)wi.Width / (Single)wi.Height;
h = (int)Math.Ceiling(wi.Width / ratio);
var imageData = wi.Resize(w.Value + 1, h.Value + 1, true, true)
.Crop(1, 1)
.Write().GetBytes();
fsr = new FileStreamResult(ms, "jpg");
}
}
catch
{
byte[] imageData = new WebImage(@"C:\Temp\Star.JPG").GetBytes();
ms = new MemoryStream(imageData);
fsr = new FileStreamResult(ms, "jpg");
}
return fsr;
}
Дело в том, что большинство методов, доступных в WebImage, возвращают экземпляр типа WebImage. Таким образом, вы всегда можете воспользоваться этой гибкостью.