使用JavaScript将画布转换为图像

使用JavaScript将画布转换为图像,javascript,jquery,canvas,html5-canvas,Javascript,Jquery,Canvas,Html5 Canvas,当我尝试canvas.toDataURL(“image/png”)时,我想用JavaScript将画布转换成图像它给出错误安全错误:操作不安全。请帮我解决这个问题 提前感谢。您的想法是正确的,它可以在非常简单的情况下工作,例如: var can = document.getElementById('canvas1'); var ctx = can.getContext('2d'); ctx.fillRect(50,50,50,50); var img = new Image(); img.s

当我尝试
canvas.toDataURL(“image/png”)时,我想用JavaScript将画布转换成图像它给出错误
安全错误:操作不安全
。请帮我解决这个问题


提前感谢。

您的想法是正确的,它可以在非常简单的情况下工作,例如:

var can = document.getElementById('canvas1');
var ctx = can.getContext('2d');

ctx.fillRect(50,50,50,50);

var img = new Image();
img.src = can.toDataURL();
document.body.appendChild(img);

但如果你“弄脏”了你的画布,那就有问题了。这是通过在画布上绘制来自不同原点的图像来完成的。例如,如果您的画布托管在www.example.com上,并且您使用来自www.wikipedia.org的图像,那么您的画布的原始清洁标志在内部设置为
false

一旦原点清除标志设置为
false
,就不再允许调用
toDataURL
getImageData


从技术上讲,如果域、协议和端口匹配,则映像的来源相同


如果您在本地工作(文件://),则绘制的任何图像都将设置该标志。这使调试变得烦人,但使用Chrome,您可以使用标志“允许从文件访问文件”启动调试。

这对我很有效

//after creating your plot do
var imgData = $('#chart1').jqplotToImageStr({}); // given the div id of your plot, get the img data
var imgElem = $('<img/>').attr('src',imgData); // create an img and add the data to it
$('#imgChart1').append(imgElem);​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ //
//创建绘图后,请执行以下操作
var imgData=$('#chart1').jqplotoimagestr({});//给定绘图的div id,获取img数据

var imgElem=$('看这个答案。这与从其他域加载画布图像的查询无关,因此它会给出错误,当图像未加载到画布时,它对我来说工作正常。使用php:+1保存图像文件作为Chrome标志,我没有听说过,但在许多情况下绝对有用。谢谢!!谢谢…!!Simon,非常简单和描述性的答案:)此答案与问题无关,该问题不使用jqPlot,并在尝试序列化图像数据时询问错误。您的示例确实解决了问题,因为它不具备重现问题所需的条件(即跨域图像资源)。