我在js中加载图像并将其绘制到画布中.绘图后,我从画布中检索imageData:
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';
Run Code Online (Sandbox Code Playgroud)
这在Safari和Firefox中都很有效,但在Chrome中失败并显示以下消息:
无法从画布获取图像数据,因为画布已被跨源数据污染.
javascript文件和图像位于同一目录中,所以我不理解chorme的行为.
当我在将视频上传到服务器之前尝试获取屏幕截图并将其另存为PNG时,我遇到了以下问题

我希望你能解决我的问题......
/*Output image show view*/
$('#file_browse').change(function(e){
getVideo(this);
});
var capbtn = document.querySelector('#video_capture');
var video = document.querySelector('video');
var canvas = document.querySelector('canvas');
var context = canvas.getContext('2d');
var w, h, ratio;
video.addEventListener('loadedmetadata', function() {
ratio = video.videoWidth / video.videoHeight;
w = video.videoWidth - 100;
h = parseInt(w / ratio, 10);
canvas.width = w;
canvas.height = h;
}, false);
capbtn.addEventListener("click", function(){
context.fillRect(0, 0, w, h);
context.drawImage(video, 0, 0, w, h);
var objImageData = canvas.toDataURL("data:image/png;");
});
function getVideo(input) {
if (input.files && input.files[0]) { …Run Code Online (Sandbox Code Playgroud) 这是我正在使用的代码当我有image.src = "/local/directory/image.png"工作,但如果我使用image.src="http://remote/path"它加载图像但休息mousemove功能不起作用.你是如何解决的?
复制并粘贴到test.htm
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script>
$(document).ready(function()
{
var image = new Image();
var ctx = $('#canvas')[0].getContext("2d");
image.src = "http://www.google.com/intl/en_com/images/srpr/logo3w.png";
//image.src = "/agents/google.png";
image.width="340";
image.height="220";
image.onload = function ()
{
ctx.drawImage(image, 0, 0, image.width, image.height);
}
$('#canvas').mousemove(function(e)
{
var canvasOffset = $(this).offset();
var canvasX = Math.floor(e.pageX - canvasOffset.left);
var canvasY = Math.floor(e.pageY - canvasOffset.top);
var imageData = ctx.getImageData(canvasX, canvasY, 1, 1);
var pixel = imageData.data;
var pixelColor = "rgba("+pixel[0]+", "+pixel[1]+", "+pixel[2]+", "+pixel[3]+")";
$(document.body).css('background-color',pixelColor);
}); …Run Code Online (Sandbox Code Playgroud) 尝试将图像绘制到画布上,然后将画布保存到图像时,出现以下错误:
未捕获的安全错误:无法在“HTMLCanvasElement”上执行“toDataURL”:可能无法导出受污染的画布
var picture = new Image();
picture.src = "https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Smiley.svg/800px-Smiley.svg.png";
var canvas = document.getElementById("background");
var context = canvas.getContext("2d");
function generate(){
var ctx = document.createElement("canvas").getContext("2d");
ctx.canvas.width = canvas.width;
ctx.canvas.height = canvas.height;
ctx.fillStyle = "red";
ctx.rect (0, 0, 40, 40);
ctx.fill();
ctx.drawImage(picture,0,0);
image = new Image();
image.setAttribute('crossOrigin', 'anonymous');
image.src = ctx.canvas.toDataURL("image/png");
}
function draw(){
context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(image, 0,0,100,100,0,0,100,100);
}
function play(){
generate();
setInterval(function(){draw();}, 0.0333);
}
window.onload = function(){
if(picture.complete)play();
else picture.onload = play;
}Run Code Online (Sandbox Code Playgroud)
<canvas id="background" width=500 height=500></canvas>Run Code Online (Sandbox Code Playgroud)
我知道这与在画布上绘制图像有关,因为删除该线后一切正常,您可以看到红色框: