Javascript 如何将阵列转换为CanvasPixelArray或创建CanvasPixelArray对象?

Javascript 如何将阵列转换为CanvasPixelArray或创建CanvasPixelArray对象?,javascript,canvas,pixel,Javascript,Canvas,Pixel,我在PHP中获得了一个图像的像素数据,我想将其转换为Javascript 我唯一的问题是PHP返回我在Javascript数组中转换的字符串,ImageData.data不是数组,而是CanvasPixelArray var cvsPixelAr = [arStrFromPHP]; var imgData = ctx.createImageData(dim[0], dim[1]); imgData.data = cvsPixelAr; 我还尝试了新的CanvasPixelArray;,但还是什

我在PHP中获得了一个图像的像素数据,我想将其转换为Javascript

我唯一的问题是PHP返回我在Javascript数组中转换的字符串,ImageData.data不是数组,而是CanvasPixelArray

var cvsPixelAr = [arStrFromPHP];
var imgData = ctx.createImageData(dim[0], dim[1]);
imgData.data = cvsPixelAr;
我还尝试了新的CanvasPixelArray;,但还是什么都没有

有人知道附近的工作吗? 如果没有,我将使用web workers更改每个值:-/


谢谢

我相信您必须将项目逐段复制到最终数据数组中:

var imgData = ctx.createImageData(dim[0], dim[1]);
var d = imgData.data;
for (var i=0,len=d.length;i<len;++i) d[i] = cvsPixelAr[i];

我相信您必须将项目逐段复制到最终数据数组中:

var imgData = ctx.createImageData(dim[0], dim[1]);
var d = imgData.data;
for (var i=0,len=d.length;i<len;++i) d[i] = cvsPixelAr[i];

对我来说,这很有效:

ctx.putImageData(
    new ImageData(someUintArray, width, height ),
    0,0
);
别忘了,这个公式必须适用:

someUintArray.length == width*height*4
您完全不需要复制整个阵列。检查


下面是一个示例,我使用它在没有DOM API的情况下调整图像大小,只使用原始像素数据:

对于我来说,这非常有效:

ctx.putImageData(
    new ImageData(someUintArray, width, height ),
    0,0
);
别忘了,这个公式必须适用:

someUintArray.length == width*height*4
您完全不需要复制整个阵列。检查


下面是一个示例,我使用它在不使用DOM API的情况下调整图像大小,只使用原始像素数据:

感谢您保留我的语法。我就是这么做的,但我想避免循环。好了,你不能避免循环。我在这里猜测,但这可能是由于ImageData.data返回的内容因使用的JS引擎而异,但最重要的是,ImageData.data是一个内部类型,因此您无法通过纯ol'JS访问它的构造函数。它吸去了减少像素的乐趣!由于您正在通过PHP生成一些JS,您可能可以生成一些JS来优化我的语法。我就是这么做的,但我想避免循环。好了,你不能避免循环。我在这里猜测,但这可能是由于ImageData.data返回的内容因使用的JS引擎而异,但最重要的是,ImageData.data是一个内部类型,因此您无法通过纯ol'JS访问它的构造函数。它吸去了减少像素的乐趣!因为您正在通过PHP生成一些JS,所以您可能可以生成一些JS进行优化