gpt4 book ai didi

javascript - canvas 已被跨域数据污染

转载 作者:可可西里 更新时间:2023-11-01 02:50:19 26 4
gpt4 key购买 nike

我正在编写脚本(或一起编辑和破解东西)来编辑页面上图像的外观。我知道 javascript 的基础知识,但这是我第一次看 Canvas 。多多包涵

我收到这个错误:

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

所以这是我的代码片段抛出错误:

var canvas = document.createElement('canvas'),
context = canvas.getContext('2d'),
height = img.naturalHeight || img.offsetHeight || img.height,
width = img.naturalWidth || img.offsetWidth || img.width,
imgData;


canvas.height = height;
canvas.width = width;
context.drawImage(img, 0, 0);

console.log(context);
try {
imgData = context.getImageData(0, 0, width, height);
} catch(e) {}

现在我找到了这篇文章:

http://bolsterweb.com/2012/06/grabbing-image-data-external-source-canvas-element/

但我不知道如何让它满足我的需要..

我知道这一切都是因为安全等等 - 但是否有解决办法来实现这一切?

谢谢

编辑

哦等等..错误是因为你无法获取ImageData..所以有没有让它成为“本地”

最佳答案

为了满足 CORS,您可以将图像托管在 CORS 友好的网站上,例如 dropbox.com

那么如果你指定 image.crossOrigin="anonymous"则不会触发安全错误:

    var image=new Image();
image.onload=function(){
}
image.crossOrigin="anonymous";
image.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/colorhouse.png";

这是代码和 fiddle :http://jsfiddle.net/m1erickson/4djSr/

<!doctype html>
<html>
<head>
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" /> <!-- reset css -->
<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>

<style>
body{ background-color: ivory; }
#canvas{border:1px solid red;}
</style>

<script>
$(function(){

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");

var image=new Image();
image.onload=function(){
ctx.drawImage(image,0,0);

// desaturation colors
var imgData=ctx.getImageData(0,0,canvas.width,canvas.height);
var data=imgData.data;

for(var i = 0; i < data.length; i += 4) {
var grayscale= 0.33*data[i]+0.5*data[i+1]+0.15*data[i+2];
data[i]=grayscale;
data[i+1]=grayscale;
data[i+2]=grayscale;
}

// write the modified image data
ctx.putImageData(imgData,0,0);

}
image.crossOrigin="anonymous";
image.src="https://dl.dropboxusercontent.com/u/139992952/stackoverflow/colorhouse.png";



}); // end $(function(){});
</script>

</head>

<body>
<canvas id="canvas" width=140 height=140></canvas>
</body>
</html>

关于javascript - canvas 已被跨域数据污染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18474727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com