2012-10-03 38 views
2

我目前使用ASP.Net ASMX Web服務中的函數來生成System.Drawing.Image。我想將這個圖像(在轉換爲png之後)傳遞給瀏覽器,作爲對AJAX調用的回覆。 (使用jQuery的$ .ajax)。我一直在谷歌搜索,但似乎無法找出如何,雖然我很確定這是可能的。我首先以某種方式將其轉換爲Data URI,或者是什麼?如何在ASP.NET ASMX Web服務中生成圖像並通過AJAX加載它?

回答

2

我不認爲你可以這樣做。爲了返回圖像,你應該有一個返回bytearray的方法,我認爲這在javascript中沒有任何用處。
我的解決方法是將圖像保存在某個位置,並將圖像的地址返回給客戶端。

更新:基於註釋,您可以將圖像的數據編碼爲Base64字符串,並在您的ajax回調中處理DATA URI。
您可以使用JSON來表示base64Encoded數據,並在阿賈克斯calklback,你可以寫這樣的:

$("#myImage").attr("src", "data:image/png;base64,RETURNED_DATA_FROM_ASMX");  

下面是一個示例代碼,您的圖像轉換成C#爲Base64:

public string ImageToBase64(Image image, 
    System.Drawing.Imaging.ImageFormat format) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
    // Convert Image to byte[] 
    image.Save(ms, format); 
    byte[] imageBytes = ms.ToArray(); 

    // Convert byte[] to Base64 String 
    string base64String = Convert.ToBase64String(imageBytes); 
    return base64String; 
    } 
} 

要了解如何格式化數據URI,您可以訪問http://en.wikipedia.org/wiki/Data_URI_scheme#Format

+0

我認爲至少可以生成一個數據URI,然後可以渲染它。我只看到它在ASP.Net標記中呈現,不通過AJAX傳遞。 – servarevitas3

+0

你是對的。我想這是可能的。雖然造成圖像的開銷約30%。我認爲數據URI只是你輸入的64位編碼。所以它應該相當容易返回數據URI – Kamyar

+0

謝謝,這是有效的。 – servarevitas3