如何使用JavaScript/HTML5获取2D图像矩阵

如何使用JavaScript/HTML5获取2D图像矩阵,javascript,html,matrix,image,Javascript,Html,Matrix,Image,是否有任何使用html5/js将任何图像转换为2d矩阵的解决方案 范例 不幸的是,由于难以解释的原因,Javascript代码不允许读取图像的像素,除非图像来自下载Javascript的同一服务器 即使该图像是公开的,并且整个互联网都可以下载它,而无需提供凭据。。。整个世界都可以,但出于安全原因,您的页面不能(!)。绕过此限制的一个技巧是编写一个服务器端部件,以代表您获取映像 如果图像是允许您读取的图像,则可以创建画布,在其上绘制图像,然后读取像素 var c = document.create

是否有任何使用html5/js将任何图像转换为2d矩阵的解决方案 范例


不幸的是,由于难以解释的原因,Javascript代码不允许读取图像的像素,除非图像来自下载Javascript的同一服务器

即使该图像是公开的,并且整个互联网都可以下载它,而无需提供凭据。。。整个世界都可以,但出于安全原因,您的页面不能(!)。绕过此限制的一个技巧是编写一个服务器端部件,以代表您获取映像

如果图像是允许您读取的图像,则可以创建画布,在其上绘制图像,然后读取像素

var c = document.createElement("canvas");
c.width = img.width;
c.height = img.height;
var ctx = c.getContext("2d");
ctx.drawImage(img, 0, 0);
var idata = c.getImageData(0, 0, img.width, img.height);
//
// here idata.data[(y*img.width + x)*4] is the red value
// of pixel (x, y), followed by green, blue and alpha
//

正如其他人所指出的,您可以使用canvas元素来实现这一点。我会发布一个JSFIDLE,但这种技术只适用于与页面位于同一域上的图像(除非图像是。。。而且JSFiddle似乎没有任何合适的图像可以在示例中使用。下面是我用来测试的代码:

// Get a reference to the image you want the pixels of and its dimensions
var myImage = document.getElementById('theImageToWorkWith');
var w = myImage.width, h = myImage.height;

// Create a Canvas element
var canvas = document.createElement('canvas');

// Size the canvas to the element
canvas.width = w;
canvas.height = h;

// Draw image onto the canvas
var ctx = canvas.getContext('2d');
ctx.drawImage(myImage, 0, 0);

// Finally, get the image data
// ('data' is an array of RGBA pixel values for each pixel)
var data = ctx.getImageData(0, 0, w, h);
仔细阅读,了解详情。
您可能还需要在您关心的浏览器上验证。

对不起,我不太理解您的问题。你能补充一些细节吗?也许你在找这样的东西。非常感谢。我现在明白了,你得到了答案。:)我将得到一个矩阵图片,例如:T[0][0]=255,T[0][1]=283这些是颜色的值您必须自己从getImageData()返回的平面数组中构建该数据结构。另外,请注意,您的问题暗示您认为每个像素只有一个字节,但事实并非如此-有4个字节(红色、绿色、蓝色和alpha通道)。@AHmédNet:
idata.data
包含所有颜色,但它是一个一维数组(Javascript没有多维数组)。每个像素有4个字节(r、g、b和alpha),因此要访问数组,您需要计算为索引
(y*width+x)*4+c
,其中
c
是组件(红色=0,绿色=1,蓝色=2,阿尔法=3)。谢谢。我现在明白了:D
// Get a reference to the image you want the pixels of and its dimensions
var myImage = document.getElementById('theImageToWorkWith');
var w = myImage.width, h = myImage.height;

// Create a Canvas element
var canvas = document.createElement('canvas');

// Size the canvas to the element
canvas.width = w;
canvas.height = h;

// Draw image onto the canvas
var ctx = canvas.getContext('2d');
ctx.drawImage(myImage, 0, 0);

// Finally, get the image data
// ('data' is an array of RGBA pixel values for each pixel)
var data = ctx.getImageData(0, 0, w, h);