我有一个图像,我已通过以下代码读入JS中的变量(最终通过剪贴板,如果这很重要)。
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"/>';
这将适当显示图像。这段代码非常特定于Mozilla,我很好,因为我的要求是严格支持FF4 +。
我的问题是两个部分,任何一个解决方案都会令人满意。是否可以显示此图像而无需转换为base64,可能使用<canvas>
标记?是否可以将此图像作为二进制文件传输到服务器(XHR或其他),而无需转换为base64?
我可以base64.encode(),将字符串传输到服务器,然后在服务器端进行解码,但似乎可能有更简单的方法。
答案 0 :(得分:2)
对于你的第一个问题,如果你有实际的图像数据(而不是它的PNG编码),你可以使用canvas imagedata。实际上,您需要执行base64操作或创建新的协议处理程序,您可以在其中以输入流通道的形式分发输入流。这将如何工作取决于如何调用上面的代码。
对于第二个问题,如果将输入流传递给POST XMLHttpRequest的send()方法,则流中的数据将按原样用作POST请求的主体。服务器可以从那里读取它。