通过RESTful webservice返回图像

时间:2014-02-21 15:19:56

标签: c# image web-services rest

我想通过Web API调用返回图像。我想要做的是获取图像,调整图像大小,然后返回它。这是我的代码......

public Image GetImage(string url)
{
    WebClient wc = new WebClient();
    byte[] data = wc.DownloadData(url);
    MemoryStream memstream = new MemoryStream(data);
    Image img = Image.FromStream(memstream);
    img = resize(img, new System.Drawing.Size(100, 100));

    return img;
}

protected static System.Drawing.Image resize(System.Drawing.Image imgToResize, System.Drawing.Size size)
{
    return (System.Drawing.Image)(new System.Drawing.Bitmap(imgToResize, size));
}

然后理想情况下,我希望能够通过HTML ...

做这样的事情
<img src="http://localhost:23520/Image/GetImage?url=whatever" />

这显然不起作用。有没有办法让这个图像标签显示RESTful服务返回的图像?

3 个答案:

答案 0 :(得分:3)

它必须是api电话吗?

我强烈建议您使用通用处理程序。

以下是一个小教程:http://www.dotnetperls.com/ashx

您可以读取图像,将其保存到内存中,调整大小,然后直接输出图像。

如果你确实去了处理程序路径,那么这就是你需要的代码

WebClient wc = new WebClient();
byte[] data = wc.DownloadData(context.Request.QueryString.Get("url"));
MemoryStream memstream = new MemoryStream(data);
Image img = Image.FromStream(memstream);
img = resize(img, new System.Drawing.Size(100, 100));
context.Response.Clear();
context.Response.ClearHeaders();
img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
context.Response.ContentType = "image/jpeg";
HttpContext.Current.ApplicationInstance.CompleteRequest();

图片标记将是

的内容

<img src="http://localhost:23520/Image/GetImage.ashx?url=whatever" />

答案 1 :(得分:2)

如果您的网络服务是WCF网络服务,您可以查看以下链接:

http://msdn.microsoft.com/en-us/library/cc681221(v=vs.110).aspx

答案 2 :(得分:1)

我建议您以base64格式发送图片

并将其设置为图像

<img src="data:image/gif;base64,<YOUR DATA>" alt="Base64 encoded image" />

您可以使用

指向base64的URL
public String ConvertImageURLToBase64(String url) 
{  
    StringBuilder _sb = new StringBuilder(); 

    Byte[] _byte = this.GetImage(url); 

    _sb.Append(Convert.ToBase64String(_byte, 0, _byte.Length));  
    return _sb.ToString();  
}