Existe-t-il un moyen de convertir une image PNG en canvas sans avoir à l'encoder en base64?PNG ou JPG (non rgb) sur websocket avec ArrayBuffer sans base64
Le serveur envoie un fichier PNG en binaire, le client le reçoit dans un ArrayBuffer et l'affiche sur le canevas. Le seul moyen d'obtenir ce résultat est d'encoder les données en base64 - côté serveur - car j'en ai besoin pour être rapide. Du côté client, j'ai créé un obj d'image avec le tag data:image/png;base64
. Je sais que vous pouvez créer un blob et un lecteur de fichiers, mais je n'ai pas réussi à faire fonctionner ça.
Ceci est la version blob:
var blob = new Blob([image.buffer],{type: "image/png"});
var imgReader = new FileReader();
imgReader.onload = function (e) {
var img = new Image();
img.onload = function (e) {
console.log("PNG Loaded");
ctx.drawImage(img, left, top);
window.URL.revokeObjectURL(img.src);
img = null;
};
img.onerror = img.onabort = function() {
img = null;
};
img.src = e.target.result;
imgReader = null;
}
imgReader.readAsDataURL(blob);
image est Uint8Array. Je crée un blob à partir de celui-ci. Le reste est explicite.
Les images sont des images PNG correctes et valides. Quand je l'envoie depuis le serveur, je les ai écrits dans un fichier du côté serveur et ils s'affichent correctement dans un visualiseur d'images.
Merci J'essayées quelque chose de similaire mais n'a pas utilisé le createObjectUrl. –