【发布时间】:2013-04-14 18:46:18
【问题描述】:
是否有可能在不使用画布的情况下将字节数组转换为图像数据?
我目前使用这样的东西,但是我认为可以在没有画布的情况下完成,还是我错了?
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);
http://jsfiddle.net/ARTsinn/swnqS/
更新
我已经尝试将其转换为 base64-uri 但没有成功:
'data:image/png;base64,' + btoa(String.fromCharCode.apply(this, byteArray));
更新 2
将问题与问题分开
画布本身不是,而是事实 oldIE(和其他)不支持它。 ...还有像 excanvas 或 flashcanvas 对于这个用例来说似乎有点过于臃肿......
【问题讨论】:
-
我认为唯一的其他方法是通过服务器。
-
您可能会将图像数据转换为 base64。例如
-
@LeeTaylor Yeh,我已经知道 base64-URI,但不知道如何将字节数组转换为图像数据就绪的 b64 代码。
-
@LeeTaylor 查看我的更新...
-
你可以试试this,但我怀疑使用画布应该会更好。
标签: javascript canvas base64 bytearray getimagedata