2013-04-30 1 views
8

Я хочу преобразовать холст в изображение с помощью JavaScript. Когда я пытаюсь сделать canvas.toDataURL("image/png");, он дает ошибку SecurityError: The operation is insecure. Пожалуйста, помогите мне решить эту проблему.Конвертировать холст в изображение с помощью JavaScript

Заранее спасибо.

+0

Посмотрите на этот ответ. http://stackoverflow.com/questions/7279438/why-is-this-todataurl-line-a-security-error –

+0

Это не имеет никакого отношения к запросу – shabunc

+0

В загружаемом изображении холста из другого домена, поэтому он дает ошибку, когда изображение не загружайте в холст, он отлично работает для меня. – mmpatel009

ответ

10

Вы имеете право идея, и она будет работать в очень простых случаях, таких как:

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


Технически, изображения одного и того же происхождения, если совпадают домены, протоколы и порты.


Если вы работаете локально (файл: //), то на любом обратном изображении будет установлен флаг. Это делает отладку раздражающей, но с Chrome вы можете запустить ее с флагом --allow-file-access-from-files, чтобы это разрешить.

+1

+1 для флага Chrome, я не слышал об этом, но абсолютно полезен во многих случаях. Благодаря!! – Adrian

-6

Это работало для меня

//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);​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ // 
+0

Этот ответ не относится к вопросу, который не использует jqPlot и спрашивает об ошибке при попытке скрепить данные изображения. Ваш пример действительно решает проблему, потому что у нее нет условий, необходимых для воспроизведения проблемы (а именно, ресурсов междоменного изображения). – apsillers