Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在web服务中返回图像_C#_Asp.net Core_.net Core 2.1 - Fatal编程技术网

C# 在web服务中返回图像

C# 在web服务中返回图像,c#,asp.net-core,.net-core-2.1,C#,Asp.net Core,.net Core 2.1,我正在开发一个基本的Web服务。用户发送一个base 64字符串,服务器必须返回一个映像 我有这门课: public class myImage { public Byte[] Matrix { get; set; } public int Width { get; set; } public int Height { get; set; } } 矩阵是包含灰度像素值的字节数组 我看到了很多关于将字节数组转换为图像的主题(比如or),但对我来说并

我正在开发一个基本的Web服务。用户发送一个base 64字符串,服务器必须返回一个映像

我有这门课:

public class myImage
{    
    public Byte[] Matrix { get; set; }        
    public int Width { get; set; }
    public int Height { get; set; }
}
矩阵是包含灰度像素值的字节数组

我看到了很多关于将字节数组转换为图像的主题(比如or),但对我来说并不适用。我添加了对System.Drawing的引用,但出现错误:

在命名空间“System.Drawing”中找不到类型名称“Image”。该类型已被转发到程序集“System.Drawing.Common,版本=0.0.0.0,Sule=中性,公共密钥令牌=cc7b13ffCD2DDD51”,考虑添加对该程序集的引用。< /P> 我看到我必须返回一个
FileResult
,但是如果我不能使用
System.Drawing.Image
,我就无法创建结果:

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

    FileResult result = ?;
    return result;
}

如何从字节数组中创建
FileResult

您可以按如下操作

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;
    }
}

你可以这样做

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;
    }
}

我认为它应该是一个
文件结果
请参阅:如果使用Asp核心文件结果有效,则可能会出现重复。检查下面的答案。不过我觉得少了点什么。确保base64的格式如下:
data:image/png;base64,iVBORw0KGgoAAA ANSUHEUGAAAUAAAAFCAYAAACNBYBLAAAHELEQVQI12P4//8/W38GIAXDIBKE0DHXGLJNBAO9TXL0Y4OHWAAAABJRU 5ErkJggg==
不返回
系统.绘图.Image
。该类用于操纵图像。您也不能只返回像素矩阵,您必须首先创建要返回的实际字节。一旦你有了实际的字节缓冲区或流,你就可以用
returnfile(bytes,…)
returnfile(stream,…)
返回它们,我认为它应该是
FileResult
请参阅:如果使用Asp核心文件结果有效,则可能重复。检查下面的答案。不过我觉得少了点什么。确保base64的格式如下:
data:image/png;base64,iVBORw0KGgoAAA ANSUHEUGAAAUAAAAFCAYAAACNBYBLAAAHELEQVQI12P4//8/W38GIAXDIBKE0DHXGLJNBAO9TXL0Y4OHWAAAABJRU 5ErkJggg==
不返回
系统.绘图.Image
。该类用于操纵图像。您也不能只返回像素矩阵,您必须首先创建要返回的实际字节。一旦您有了实际的字节缓冲区或流,您就可以使用
返回文件(字节,…)
返回文件(流,…)