从XMLHttpRequest获取图像并显示它

问题描述:

我得到了这个Web服务,它为我提供了一个(jpeg)图像。我要的是借此图像,将其转换成数据URI和HTML5的画布上显示,这样的:从XMLHttpRequest获取图像并显示它

obj = {}; 

    obj.xmlDoc = new window.XMLHttpRequest(); 
    obj.xmlDoc.open("GET", "/cgi-bin/mjpegcgi.cgi?x=1",false, "admin", "admin"); 
    obj.xmlDoc.send(""); 

    obj.oCanvas = document.getElementById("canvas-processor"); 
    obj.canvasProcessorContext = obj.oCanvas.getContext("2d"); 

    obj.base64Img = window.btoa(unescape(encodeURIComponent(obj.xmlDoc.responseText))); 

    obj.img = new Image(); 
    obj.src = 'data:image/jpeg;base64,' + obj.base64Img; 
    obj.img.src = obj.src 
    obj.canvasProcessorContext.drawImage(obj.img,0,0); 

不幸的是,这段代码不能正常工作;图像没有画在画布上(加上它似乎有宽度和高度= 0,它可能没有正确解码?我没有例外)。 img.src看起来像data:image/jpeg;base64,77+977+977+977+9ABBKRklG....

解决:原来我应该重写与MIME类型:

req.overrideMimeType('text/plain; charset=x-user-defined'); 

,并设置响应类型:

req.responseType = 'arraybuffer'; 

(见this。如果您更改响应类型,您也应该发出异步请求)。

首先你需要创建一个img元素(它是隐藏的) 然后你完成你所做的,除了你在你的img元素上听onload事件。 启动此事件时,您可以获取图片的宽度和高度,以便您可以将画布设置为相同大小。

您可以像在最后一行那样绘制图像。

+0

我用数据URI来源的图像立即准备好了,但即使使用onload事件它也不会起作用(反而会触发onerror)。无论如何,我解决了这个问题,看我最后的编辑。 – janesconference 2012-04-03 11:43:36