2011-05-04 17 views
0

我有,我已經讀入JS變量的圖像(最終通過剪貼板,如果該事項)通過下面的代碼。(火狐)工作二進制數據在Javascript

var rawImg = new Object(); 
//...populate rawImg (code left out for brevity) 

var bis = Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream); 
var is = rawImg.value.QueryInterface(Components.interfaces.nsIInputStream); 
bis.setInputStream(is); 
var img = bis.readBytes(is.available()); 

img是一個圖像。我可以在http://emilsblog.lerch.org/2009/07/javascript-hacks-using-xhr-to-load.html

var base64Img = Base64.encodeBinary(img); 
document.getElementById("holder").innerHTML = '<img src="data:image/png;base64,'+base64Img+'" alt="some image"/>'; 

此驗證此使用找到的Base64的庫將適當地顯示圖像。這段代碼非常適合Mozilla,我對此很滿意,因爲我的要求是嚴格支持FF4 +。

我的問題是兩個部分,到任何一個解決方案將是令人滿意的。是否有可能在不轉換爲base64的情況下顯示該圖像,可能是<canvas>標籤?是否有可能將這個圖像作爲二進制傳輸到服務器(XHR或其他)而不轉換爲base64?

我可以base64.encode(),將字符串傳輸到服務器,然後在服務器端解碼,但似乎可能有一個更簡單的方法。

回答

2

對於你的第一個問題,如果你有實際的圖像數據(而不是PNG編碼),你可以使用canvas imagedata。實際上,你需要做base64的事情,或者創建一個新的協議處理程序,在這個協議處理程序中,你以輸入流通道的形式發送輸入流。這將如何工作取決於如何調用上面的代碼。

對於第二個問題,如果將輸入流傳遞給POST XMLHttpRequest的send()方法,那麼流中的數據將按原樣用作POST請求的主體。服務器可以從那裏讀取它。