Es geht darum, Images, die auf einem Server dynamisch generiert werden
[dh. nicht als File vorliegen, denn dann müßte man nur das src-Attribut setzen]
auf einem client als <img> Tag anzuzeigen.
(Sie sollen per CGI-Script bzw. WebSocket übertragen werden).
Alternative wäre, das Bild pixelweise zu übertragen und in einem Canvas anzuzeigen
(größere zu übertragende Datenmenge).
Hier wird als Test ein normales Image-File mit XMLHttpRequest geladen (was normalerweise keinen Sinn macht).
Der 2. Test benutzt "WebSocketServer.java" (ICGEM/potato) auf port 8080, der das Bild dynamisch generiert
Javascript-Code
function async_load_image() { // asynchrones Lesen eines Files als 'arraybuffer' vom aktuellen server
var fname = "/ICGEM/potato/Geoid-eigen-6c-Ellipsoid.jpg";
var areq = new XMLHttpRequest();
areq.open("POST",fname,true); // true = asynchron,
areq.responseType = "arraybuffer"; // Typ setzen auf binär
areq.onload = function(e) {
if (areq.status != 200) alert("Fehler beim Laden von "+fname); // meist 500=Internal Server-Fehler
var arbuf = areq.response; // = [object ArrayBuffer] (nicht 'responseText'!)
console.log(arbuf+" mit "+arbuf.byteLength+" byte");
var cbuf = new Uint8Array(arbuf); // ein 'View' auf arbuf
var b64 = encode(cbuf); // window.btoa() funzt nur für Strings
// b64 = window.btoa(areq.responseText); // gibts nicht
console.log("kodiert mit "+b64.length+" chars");
document.getElementById('img_id').src = "data:image/jpg;base64,"+b64;
}
areq.send();
}