2014-01-30 2 views
1

Привет, я пытался сохранить свой холст в виде png и сгенерировать его на веб-странице, как только он будет выполнен. Проблема, с которой я сталкиваюсь, заключается в том, что когда изображение сохраняется и выводится, оно отображает только текст, который загружается из текстового поля. Я также загружаю фоновое изображение, которое отображается на холсте, но не в выведенном изображении.Сохранение холста как png

<form> 
<input name="name" id="name" type="text"/> 
</form> 
<canvas id="myCanvas" width="640" height="480"></canvas> 
<input name="" type="button" onclick="save()" /> Generate 

<div id="sample"> 
</div> 
<script type="text/javascript" src="canvas.js"></script> 

ява скрипт

var myCanvasElement=document.getElementById("myCanvas"); 
    var drawingContext=myCanvasElement.getContext("2d"); 

    // clear canvas and div 
    drawingContext.clearRect (0 , 0 , 640 , 480); 
    document.getElementById("sample").innerHTML = ""; 

    // add text box text to canvas 
    var amount1 = document.getElementById("name").value; 
    drawingContext.font = "bold 12px sans-serif"; 
    drawingContext.fillText(amount1, 30, 43); 
    drawingContext.fillText(amount1, 30, 43); 

    //loads in image to canvas 

    var imageObj = new Image(); 
    imageObj.onload = function() { 
    drawingContext.drawImage(imageObj, 100, 150); 
    }; 
    imageObj.src ='132.png'; 

    //converts canvas to image 
    var canvas = document.getElementById('myCanvas'), 
    dataUrl = canvas.toDataURL(), 
    imageFoo = document.createElement('img'); 
    imageFoo.src = dataUrl; 

    //Style your image here 
    imageFoo.style.width = '640px'; 
    imageFoo.style.height = '480px'; 

    //After you are done styling it, append it to the BODY element 
    var theDiv = document.getElementById("sample"); 
    theDiv.appendChild(imageFoo); 
} 

мне было интересно, если кто-то какие-либо предложения о том, почему он мог бы делать это Спасибо заранее

+0

Далее к тому, что SeeTheC сказал - это не будет работать, если вы просто «запустить» файл с вашего компьютера. Вам нужно получить доступ к нему через Localhost. В противном случае вы получите сообщение типа «canvas tainted with cross-origin data». – enhzflep

+0

Добавляя к enhzflep, он не будет работать в Chrome, IE и Safari. Но только для целей тестирования вы можете запустить его firefox. – SeeTheC

ответ

3

Дайте время, чтобы загрузить изображение. когда он загружается, затем преобразуйте его в DataUrl.

Попробуйте это:

// your code 
    var imageObj = new Image(); 
    imageObj.onload = function() { 
     drawingContext.drawImage(imageObj, 100, 150); 
     setTimeout(loadImage,200) ; 
    }; 

imageObj.src ='132.png'; 

После загрузки изображения вызова этого:

function loadImage() 
{ 
    //converts canvas to image 
    var canvas = document.getElementById('myCanvas'), 
    dataUrl = canvas.toDataURL(), 
    imageFoo = document.createElement('img'); 
    imageFoo.src = dataUrl; 

    //Style your image here 
    imageFoo.style.width = '640px'; 
    imageFoo.style.height = '480px'; 

    //After you are done styling it, append it to the BODY element 
    var theDiv = document.getElementById("sample"); 
    theDiv.appendChild(imageFoo); 
} 
+0

Спасибо, что ты был прав, позволив ему загрузить проблему. – tomtom

Смежные вопросы