Je charge une image dans js et la dessine dans une toile. Après avoir dessiné, je récupère imageData de la toile:
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';
Cela fonctionne parfaitement dans Safari et Firefox, mais échoue dans Chrome avec le message suivant:
Impossible d'obtenir les données d'image du canevas car le canevas a été corrompu par des données croisées.
Le fichier javascript et l'image sont situés dans le même répertoire, je ne comprends donc pas le comportement de chorme.
Pour activer CORS ( Partage de ressources d'origine croisée ) pour vos images, transmettez l'en-tête HTTP avec la réponse de l'image:
Access-Control-Allow-Origin: *
L’origine est déterminée par le domaine et le protocole (par exemple, http et https ne sont pas identiques) de la page Web et non par l’emplacement du script.
Si vous utilisez localement en utilisant file: //, cela est généralement considéré comme un problème interdomaine; il vaut donc mieux passer par
http://localhost/
Pour résoudre le problème de domaine croisé avec file: //, vous pouvez démarrer chrome avec le paramètre
--allow-file-access-from-files
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';
J'espère que cela t'aides
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';
j'espère que cela t'aides.
Si les en-têtes de réponse du serveur contiennent Access-Control-Allow-Origin: *
, vous pouvez le corriger du côté client: Ajoutez un attribut à l'image ou à la vidéo.
<img src="..." crossorigin="Anonymous" />
<video src="..." crossorigin="Anonymous"></video>
Sinon, vous devez utiliser un proxy côté serveur.