我想从控制器返回一个图像,并能够在其上应用我自己的过滤器。
我创建了一个控制器,并希望它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");
我在这里缺少什么?
答案 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)