Ich habe diesen Webservice, der mir ein (JPEG) Bild gibt. Was ich will, ist dieses Bild nehmen, wandeln es in ein Data URI und zeigt sie auf einem HTML5-Canvas, wie folgt aus:Erhalte ein Bild von einem XMLHttpRequest und zeige es an
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);
Leider ist dieses Stück Code funktioniert nicht; das Bild ist überhaupt nicht auf der Leinwand gemalt (plus scheint, dass Breite und Höhe = 0, könnte es nicht korrekt dekodiert werden? Ich bekomme keine Ausnahmen). img.src sieht aus wie data:image/jpeg;base64,77+977+977+977+9ABBKRklG....
Entschlossen: stellt sich heraus, ich mit den Mime-Typ außer Kraft gesetzt haben sollte:
req.overrideMimeType('text/plain; charset=x-user-defined');
und stellen Sie den Antworttyp mit:
req.responseType = 'arraybuffer';
(siehe this. Sie sollten eine asynchrone Anfrage machen, wenn Sie auch den Antworttyp ändern.
Ich habe Bilder mit einer Daten-URI-Quelle war sofort bereit, aber selbst wenn mit dem Onload-Ereignis wird es nicht funktionieren (onerror wird stattdessen ausgelöst). Ich habe das Problem trotzdem gelöst, siehe meine letzte Bearbeitung. – janesconference