我正在使用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";
}
上面的代碼拋出以下異常:
Unable to get image data from canvas because the canvas has been tainted by cross-origin data.
Uncaught Error: SECURITY_ERR: DOM Exception 18
能
人請告訴我如何解決這個問題?
不要從其他領域,其內容則不允許訪問使用的圖片? – Bergi
也許這將有助於診斷(這是一箇舊的帖子):我從一個從SVG元素創建的數據URI生成的畫布沒有任何圖像,這個錯誤。在FF和Safari上工作得很好。 – LeeGee
我從SVG元素的JavaScript動態創建的圖像中獲取該圖像,並將其作爲數據URI傳遞。這是一種痛苦,然後說:「Uncaught SecurityError:試圖突破用戶代理的安全策略。」 Chrome試圖太聰明? – LeeGee