在网络服务中返回图像

时间:2019-01-14 10:05:34

标签: c# asp.net-core .net-core-2.1

我正在开发基本的Web服务。用户发送以64为基数的字符串,并且发球必须返回图片。

我上了这个课:

public class myImage
{    
    public Byte[] Matrix { get; set; }        
    public int Width { get; set; }
    public int Height { get; set; }
}

矩阵是一个字节数组,其中包含灰度像素值。

我看到了很多有关将字节数组转换为Image的主题(例如this onethis one),但是它对我没有用。我添加了对System.Drawing的引用,但出现了错误:

  

在名称空间“ System.Drawing”中找不到类型名称“ Image”。此类型已转发给程序集'System.Drawing.Common,版本= 0.0.0.0,区域性=中性,PublicKeyToken = cc7b13ffcd2ddd51',考虑添加对该程序集的引用。

我看到我必须返回一个FileResult,但是如果我不能使用System.Drawing.Image,我将无法创建结果:

[HttpPost]
[Route("CreateImage")]
public FileResult PostSealCryptItem([FromBody]String base64)
{
    MyImage myImg = createImg(base64);

    FileResult result = ?;
    return result;
}

如何从我的字节数组创建FileResult

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作。

public HttpResponseMessage  PostSealCryptItem([FromBody]String base64)
{
    MyImage myImg = createImg(base64);
    Image img = convertMyImgToImage(myImg);
    using(MemoryStream ms = new MemoryStream())
    {
        img.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new ByteArrayContent(ms.ToArray());
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png");

        return result;
    }
}