您可以按照以下方式从数组中创建图像:
var width = 400,
height = 400,
buffer = new Uint8ClampedArray(width * height * 4)
末尾的* 4
代表RGBA,我们需要与canvas兼容。
用一些数据填充缓冲区,例如:
for(var y = 0; y < height; y++) {
for(var x = 0; x < width; x++) {
var pos = (y * width + x) * 4; // position in buffer based on x and y
buffer[pos ] = ...; // some R value [0, 255]
buffer[pos+1] = ...; // some G value
buffer[pos+2] = ...; // some B value
buffer[pos+3] = 255; // set alpha channel
}
}
填充后,将缓冲区用作画布的源:
// create off-screen canvas element
var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d');
canvas.width = width;
canvas.height = height;
// create imageData object
var idata = ctx.createImageData(width, height);
// set our buffer as source
idata.data.set(buffer);
// update canvas with new data
ctx.putImageData(idata, 0, 0);
请注意,您可以使用imageData缓冲区(此处为:idata.data)而不是创建自己的缓冲区。只有在使用浮点值或从其他源获取缓冲区时才会真正有用 - 尽管如上设置缓冲区将为您处理剪辑和舍入值。
现在,您的自定义数组中的数据被复制到画布缓冲区。下一步是创建图像文件。
var dataUri = canvas.toDataURL()
现在您可以使用data-uri作为图像的来源:
image.onload = imageLoaded
image.src = dataUri