通过websocket,我得到了一个以PNG格式为基础的二进制图像缓冲区(类似于此处这样)。
我想将此PNG缓冲区加载到画布中,然后读取不同的像素以读取未压缩的数据。
我设法做到了,但这很愚蠢:
function onBinaryMessage(/*ArrayBuffer*/ input) {
input = new Uint8Array(input);
var str = '';
for (var i = 0; i < input.byteLength; i++)
str = str + String.fromCharCode(input[i]);
var image = document.getElementById("image");
image.src = 'data:image/png;base64,' + btoa(str);
var c = document.getElementById("canvas");
var ctx = c.getContext("2d");
ctx.drawImage(image, 0, 0);
var imgData = ctx.getImageData(0, 0, image.width, image.height);
console.log(imgData);
}
我需要将二进制数据转换成字符串,以便对该字符串进行base64编码,然后将这个新生成的base64字符串赋值给我的图片src属性... 浏览器需要重新将这个base64编码数据转换回我得到的原始PNG缓冲区...
有没有直接设置画布缓冲区的方法? 或者有没有更好的流处理方法?
我认为可以使用File API将缓冲区写入临时文件,但创建文件的成本很高 :(
有什么建议吗?
var canvas = document.createElement('canvas');
,无需将其附加到DOM(当然,像图像一样,它仍然是一个DOM元素)。很高兴我能帮到你! :) - user1693593