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