2014-02-21 76 views
1

我想通過Web API調用返回圖像。我想要做的是獲取圖像,調整圖像大小,然後將其返回。這裏是我的代碼...通過RESTful webservice返回圖像

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服務返回的圖片嗎?

+0

我不知道是否會在工作所有。我寧願發送該圖像的Base64String,然後將其轉換爲客戶端的Bitmap或BitmapImage,並將其應用於此處。你有想過嗎?我很確定你不能只返回一個Image對象。此外,你的'src'屬性需要一個URL,並且你的GetImage方法返回一個Image對象,所以根本不起作用。 – Subby

回答

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(); 

代碼如果你的web服務的圖像標籤將沿

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

+0

謝謝你。實施了一個處理程序,它的工作 – prawn

1

我建議你用base64格式

發送圖像,並將其設置爲圖像

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

網址爲Base64可以使用

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(); 
} 
相關問題