2015-05-14 62 views
1

我有一個應用程序,用戶可以通過文件輸入選擇圖像。選擇圖像後,我通過AJAX將圖像上傳到控制器並將其轉換爲灰度。轉換方法返回一個System.Drawing.Image對象。我想要的是在AJAX成功函數上返回這個灰度圖像對象,並將其顯示在原始圖像上傳的同一頁中的另一個div上。請注意,這個圖像從來沒有存儲在任何地方,所以沒有理由在我的控制器中使用文件返回操作。 我能做什麼? 問候 路易斯。返回從MVC控制器和顯示器的圖像類型

回答

1

你會做什麼是Base64編碼,圖像,並將其發送回客戶端,然後在客戶端做這樣的事情在HTML:

<img src="data:image/png;base64,' + data + '" /> 
0
public class ImageResult : ActionResult 
{ 
    private Image Image { get; private set; } 
    private ImageFormat ImageFormat { get; private set; } 

    public ImageResult(Image image, ImageFormat imageFormat = ImageFormat.Png) 
    { 
     if (image == null) throw new ArgumentNullException("image"); 
     this.Image = image; 
     this.ImageFormat = format; 
    } 

    public override void ExecuteResult(ControllerContext context) 
    { 
     var httpContext = context.HttpContext; 

     httpContext.Response.Clear(); 
     httpContext.Response.ContentType = this.GetContentType(); 
     this.Image.Save(httpContext.Response.OutputStream, this.ImageFormat); 
    } 

    private String GetContentType() 
    { // borrowed: http://stackoverflow.com/a/15261265/298053 
     var imageCodecInfos = ImageCodecInfo.GetImageEncoders(); 
     var codec = imageCodecInfos.FirstOrDefault(x => x.FormatID == this.ImageFormat.Guid); 
     return codec != null ? codec.MimeType : "application/octet-stream"; 
    } 
} 

然後,你應該能夠做到例如:

Image bwImage = /* service call */; 
return new ImageResult(bwImage, ImageFormat.Png);