无法从画布获取图像数据,因为画布已被跨源数据污染

Gau*_*rav 10 javascript jquery

我使用html5 Canvas从图像中获取颜色.为此,我在javascript中编写了以下代码:

http://jsfiddle.net/8dQSS/1/(请检查控制台以查看异常)

function getImageColor() {
    var colors = [];
    var image = new Image();

    image.onload = function () {
        var canvas = document.createElement("canvas");
        canvas.width = image.width;
        canvas.height = image.height;

        // Draw the image in canvas
        var ctx = canvas.getContext("2d");
        ctx.drawImage(image, 0, 0);

        // Get the pixel data
        var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);

        // Loop through imageData.data - an array with 4 values per pixel: red, green, blue, and alpha
        for (var x = 0; x < imageData.width; x++) {
            for (var y = 0; y < imageData.height; y++) {
                var index = 4 * (y * imageData.width + x);
                var r = imageData.data[index];
                var g = imageData.data[index + 1];
                var b = imageData.data[index + 2];
                var a = imageData.data[index + 3];

                colors.push("rgb(" + r + "," + g + "," + b + ")");
            }
        }
    };
    image.src = "http://www.xxxxxxxxxxxx.com/demos/assets/image.jpg";
}
Run Code Online (Sandbox Code Playgroud)

上面的代码抛出以下异常:

Unable to get image data from canvas because the canvas has been tainted by cross-origin data.
Uncaught Error: SECURITY_ERR: DOM Exception 18 
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何解决这个问题?

Ash*_*yal 11

你是通过文件系统使用它吗?如果是,则在服务器(localhost)上运行它.


Raz*_*lle 4

我知道的唯一解决方案是将要加载的图像与文件托管在同一服务器上,您无法通过画布访问和处理网络上所需的任何图像。

编辑:如果你愿意,你可以这样做。