加载远程图像并从控制器写入

时间:2014-09-23 20:21:58

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我想从控制器返回一个图像,并能够在其上应用我自己的过滤器。

我创建了一个控制器,并希望它return Content(Img.BinaryData,"image/jpeg");

不需要视图。

我使用 DynamicImage 插件来获取远程图片并对其进行一些过滤,但它会返回System.Windows.Media.Imaging.WriteableBitmap个对象。

这是我得到的最远,但我试图将其作为二进制数据返回:

using SoundInTheory.DynamicImage.Sources;   

var composition = new Composition();
ImageLayer layer = new ImageLayer { Source = new RemoteImageSource { Url = "http://www.google.com/images/srpr/logo4w.png" } };
composition.Layers.Add(layer);

GeneratedImage generatedImage = composition.GenerateImage();

var Img = generatedImage.Image; // returns System.Windows.Media.Imaging.WriteableBitmap

return Content(Img.ToString(),"image/jpeg");

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

试试这个:

var Img = generatedImage.Image

var encoder = new JpegBitmapEncoder();
var bmFrame = BitmapFrame.Create(Img);
encoder.Frames.Add(bmFrame);
encoder.QualityLevel = 100;

var res = new byte[0];

using (var stream = new MemoryStream())
{               
    encoder.Frames.Add(bmFrame);
    encoder.Save(stream);
    res = stream.ToArray(); 
    stream.Close();
}

return File(res, "image/jpeg");

(BitmapSource到byte []的转换取自https://stackoverflow.com/a/11085124/1625737