我想將畫布轉換爲帶有JavaScript的圖像,當我嘗試canvas.toDataURL("image/png");
時,它會給出錯誤SecurityError: The operation is insecure
。請幫我解決這個問題。將畫布轉換爲帶有JavaScript的圖像
在此先感謝。
我想將畫布轉換爲帶有JavaScript的圖像,當我嘗試canvas.toDataURL("image/png");
時,它會給出錯誤SecurityError: The operation is insecure
。請幫我解決這個問題。將畫布轉換爲帶有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);
http://jsfiddle.net/simonsarris/vgmFN/
但是,如果你有「髒」畫布就成了問題。這是通過將圖像繪製到來自不同原點的畫布完成的。例如,如果您的畫布在www.example.com上託管,並且您使用了來自www.wikipedia.org的圖像,則畫布的原始清除標誌在內部設置爲false
。
一旦起源清潔標誌設置爲false
,就不再允許調用toDataURL
或getImageData
從技術上講,圖像是同出一源,如果域,協議和端口相匹配。
如果你在本地工作(file://),那麼繪製的任何圖像都會將該標誌設置。這使得調試變得煩人,但使用Chrome,您可以使用標誌--allow-file-access-from-files
來啓動它,以允許執行此操作。
Chrome旗幟+1,我沒有聽說過,但在許多情況下絕對有用。謝謝!! – Adrian 2013-04-30 14:15:04
這爲我工作
//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); //
這個答案與這個問題沒有關係,它不使用jqPlot,並在嘗試對圖像數據進行字符串化時詢問錯誤。你的例子確實解決了這個問題,因爲它沒有必要的條件來重現問題(即跨域圖像資源)。 – apsillers 2013-08-06 14:50:16
看看這個答案。 http://stackoverflow.com/questions/7279438/why-is-this-todataurl-line-a-security-error – 2013-04-30 13:45:31
這與查詢無關 – shabunc 2013-04-30 13:47:06
在從其他域的畫布圖像加載,所以它給錯誤,當圖像不在畫布中加載它對我來說工作正常。 – mmpatel009 2013-04-30 13:52:27