Reputation: 1217
I'm loading an image in js and draw it into a canvas. After drawing, i retrieve imageData from the canvas:
var img = new Image();
img.onload = function() {
canvas.drawImage(img, 0, 0);
originalImageData = canvas.getImageData(0,0,width, height)); //chrome fails
}
img.src = 'picture.jpeg';
This works perfectly both in Safari and Firefox, but fails in Chrome with the following message:
Unable to get image data from canvas because the canvas has been tainted by cross-origin data.
The javascript file and the image are located in the same directory, so i don't understand the behavior of chorme.
Upvotes: 34
Views: 81539
Reputation: 12708
Make sure you are serving the local files rather than browsing to them. If you are on OSX you already have a Python Server installed. Simply cd
into your web site’s directory in the command line, run python -m SimpleHTTPServer
, then go to http://localhost:8000/
in the browser.
Alternately, you can use Node. Run npm install -g http-server
, then http-server
. This will serve your index page on port 8080, i.e. browse to http://localhost:8080/
.
Upvotes: 0
Reputation: 5893
If the server response headers contains Access-Control-Allow-Origin: *
, then you can fix it from client side: Add an attribute to the image or video.
<img src="..." crossorigin="Anonymous" />
<video src="..." crossorigin="Anonymous"></video>
Otherwise you have to use server side proxy.
Upvotes: 1
Reputation: 1897
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
var img = new Image();
img.crossOrigin = "anonymous";
img.onload = function() {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
originalImageData = ctx.canvas.toDataURL();
}
img.src = 'picture.jpeg';
hope this helps.
Upvotes: 3
Reputation: 856
To solve the cross domain issue with file://, you can start chrome with the parameter
--allow-file-access-from-files
Upvotes: 13
Reputation: 83
var img = new Image();
img.onload = function() {
canvas.drawImage(img, 0, 0);
originalImageData = canvas.getImageData(0,0,width, height)); //chrome will not fail
}
img.crossOrigin = 'http://profile.ak.fbcdn.net/crossdomain.xml';//crossdomain xml file, this is facebook example
img.src = 'picture.jpeg';
Hope this helps
Upvotes: 5
Reputation: 3431
To enable CORS (Cross-Origin Resource Sharing) for your images pass the HTTP header with the image response:
Access-Control-Allow-Origin: *
The origin is determined by domain and protocol (e.g. http and https are not the same) of the webpage and not the location of the script.
If you are running locally using file:// this is generally always seen as a cross domain issue; so its better to go via
http://localhost/
Upvotes: 25