Как я могу перенаправить на изображение по умолчанию использовать WebImage в MVC - PullRequest
0 голосов
/ 24 мая 2018

Я использую 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 Ответ

0 голосов
/ 24 мая 2018

Что вы подразумеваете под редиректом?.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.Таким образом, вы всегда можете воспользоваться этой гибкостью.

...