从MVC控制器和显示器返回图像类型

时间:2015-05-14 21:41:12

标签: jquery ajax asp.net-mvc image

我有一个应用程序,用户可以通过文件输入选择图像。选择图像后,我通过AJAX将图像上传到控制器并将其转换为灰度。转换方法返回System.Drawing.Image对象。我想要的是在AJAX成功函数上返回此灰度图像对象,并将其显示在上载原始图像的同一页面中的另一个div上。请注意,此图像永远不会存储在任何位置,因此没有理由在我的控制器中使用文件返回操作。 我能做什么? 问候 路易斯。

2 个答案:

答案 0 :(得分:1)

你要做的是base64对图像进行编码并将其发送回客户端,然后在客户端中在HTML中执行类似的操作:

<img src="data:image/png;base64,' + data + '" />

答案 1 :(得分: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);