将字节数组转换为没有画布的图像数据

yck*_*art 6 javascript base64 canvas bytearray getimagedata

是否可以在不使用画布的情况下将字节数组转换为图像数据?

我目前使用的是这样的东西,但是我认为没有画布可以做到,或者我错了吗?

var canvas = document.getElementsByTagName("canvas")[0];
var ctx = canvas.getContext("2d");

var byteArray = [ 
    255, 0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, // red
    0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, // green
    0, 0, 255, 255, 0, 0, 255, 255, 0, 0, 255, 255 // blue
];

var imageData = ctx.getImageData(0, 0, 10, 3);
for(var i = 0; i < byteArray.length; i+=4){
    imageData.data[i] = byteArray[i];
    imageData.data[i+1] = byteArray[i + 1];
    imageData.data[i+2] = byteArray[i + 2];
    imageData.data[i+3] = byteArray[i + 3];
}

ctx.putImageData(imageData, 0, 0);
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/ARTsinn/swnqS/

更新

我已经尝试将其转换为base64-uri但没有成功:

'data:image/png;base64,' + btoa(String.fromCharCode.apply(this, byteArray));

更新2

将问题从问题中分离出来

画布本身不是,而是oldIE(以及其他)不支持它的事实....像excanvas或flashcanvas这样的库对于这个用例似乎有点过于膨胀......

mar*_*rkE 0

canvas.getImageData返回一个 ImageData 对象,如下所示:

interface ImageData {
  readonly attribute unsigned long width;
  readonly attribute unsigned long height;
  readonly attribute Uint8ClampedArray data;
};
Run Code Online (Sandbox Code Playgroud)

(请参阅规格:http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#imagedata

我想您可以将适合该界面的数据装箱并尝试一下。

如果你尝试,请告诉我结果如何:)

或者,您可以创建一个具有所需宽度/高度的内存画布- document.createElement("canvas"),然后获取其图像数据并插入您自己的数组。我知道这有效。是的...这与您的问题相反,但您没有将画布添加到页面中。