如何添加从画布元素创建的图像到页面?

问题描述:

项目需要将画布元素转换为图像。我有一些问题,并试图创建一个简单的项目,我可以做一些实验。该项目应该将canvas元素转换为图像并将其附加到div,但它似乎不起作用。看下面的代码我该怎么做?如何添加从画布元素创建的图像到页面?

谢谢, 马特

/** 
 
* Ken Fyrstenberg Nilsen 
 
* Abidas Software 
 
*/ 
 
var canvas = document.getElementById('canvas'), 
 
    ctx = canvas.getContext('2d'); 
 

 
/** 
 
* Demonstrates how to download a canvas an image with a single 
 
* direct click on a link. 
 
*/ 
 
function doCanvas() { 
 
    /* draw something */ 
 
    ctx.fillStyle = '#f90'; 
 
    ctx.fillRect(0, 0, canvas.width, canvas.height); 
 
    ctx.fillStyle = '#fff'; 
 
    ctx.font = '60px sans-serif'; 
 
    ctx.fillText('Code Project IE', 10, canvas.height/2 - 15); 
 
    ctx.font = '26px sans-serif'; 
 
    ctx.fillText('Click link above to save this as image', 15, canvas.height/2 + 35); 
 
} 
 

 

 
function downloadCanvas(link, canvasId, filename) { 
 
    var canvas = document.getElementById(canvasId); 
 
    var imgData = canvas.toDataURL(); 
 
    var img = new Image(); 
 
    img.onload = split_4; 
 
    img.src = imgData; 
 
    img.appendTo($('#imagediv')); 
 

 
} 
 

 

 
function split_4() { 
 

 
      
 
    alert('did something happen?') 
 

 
     }; 
 

 
/** 
 
* The event handler for the link's onclick event. We give THIS as a 
 
* parameter (=the link element), ID of the canvas and a filename. 
 
*/ 
 
document.getElementById('download').addEventListener('click', function() { 
 
    downloadCanvas(this, 'canvas', 'test.png'); 
 
}, false); 
 

 
/** 
 
* Draw something to canvas 
 
*/ 
 
doCanvas();
\t body { 
 
\t  background-color:#555557; 
 
\t  padding:0; 
 
\t  margin:0; 
 
\t  overflow:hidden; 
 
\t  font-family:sans-serif; 
 
\t  -webkit-user-select: none; 
 
\t  -khtml-user-select: none; 
 
\t  -moz-user-select: none; 
 
\t  -ms-user-select: none; 
 
\t  user-select: none; 
 
\t } 
 
\t canvas { 
 
\t  border:1px solid #000; 
 
\t  float:left; 
 
\t  clear:both; 
 
\t } 
 
\t #download { 
 
\t  float:left; 
 
\t  cursor:pointer; 
 
\t  color:#ccc; 
 
\t  padding:3px; 
 
\t } 
 
\t #download:hover { 
 
\t  color:#fff; 
 
\t } 
 
\t /* 
 
\t div, input { 
 
\t  font-size:16px; 
 
\t  font-family:sans-serif; 
 
\t  border:1px solid #000; 
 
\t  border-radius: 5px; 
 
\t  float:left; 
 
\t  padding:5px; 
 
\t  width:50px; 
 
\t  margin:1px 1px; 
 
\t  background-color:#bbb; 
 
\t } 
 
\t input[type='text'] { 
 
\t  font-size:16px; 
 
\t  font-weight:bold; 
 
\t  width:70px; 
 
\t  text-align:center; 
 
\t  background-color:#fff; 
 
\t  padding-bottom:4px; 
 
\t } 
 
\t input[type='button'] { 
 
\t  font-size:16px; 
 
\t  font-weight:bold; 
 
\t  width:110px; 
 
\t  text-align:center; 
 
\t  background-color:#333; 
 
\t  color:#eee; 
 
\t  padding-bottom:4px; 
 
\t } 
 
\t input[type='button']:hover { 
 
\t  background-color:#fff463; 
 
\t  color:#000; 
 
\t } 
 
\t input[type='range'] { 
 
\t  width:100px; 
 
\t  margin:0 0 0 10px; 
 
\t } 
 
*/ 
 
\t
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a id="download">Click to Create and Append Image from Canvas Element</a> 
 
<canvas width="500" height="300" id="canvas">Sorry, no canvas available</canvas> 
 
<div id="imagediv"></div>

+0

你检查你的开发工具?他们给你一个很好的想法是什么问题。 –

+0

不是img.appendTo($('#imagediv'));更应该是像$('#imagediv')。appendTo(img)或类似jquery的东西... img在代码中没有函数appendTo – joopmicroop

相反的img.appendTo($('#imagediv'));,做$('#imagediv').append(img);。干杯!

/** 
 
* Ken Fyrstenberg Nilsen 
 
* Abidas Software 
 
*/ 
 
var canvas = document.getElementById('canvas'), 
 
    ctx = canvas.getContext('2d'); 
 

 
/** 
 
* Demonstrates how to download a canvas an image with a single 
 
* direct click on a link. 
 
*/ 
 
function doCanvas() { 
 
    /* draw something */ 
 
    ctx.fillStyle = '#f90'; 
 
    ctx.fillRect(0, 0, canvas.width, canvas.height); 
 
    ctx.fillStyle = '#fff'; 
 
    ctx.font = '60px sans-serif'; 
 
    ctx.fillText('Code Project IE', 10, canvas.height/2 - 15); 
 
    ctx.font = '26px sans-serif'; 
 
    ctx.fillText('Click link above to save this as image', 15, canvas.height/2 + 35); 
 
} 
 

 

 
function downloadCanvas(link, canvasId, filename) { 
 
    var canvas = document.getElementById(canvasId); 
 
    var imgData = canvas.toDataURL(); 
 
    var img = new Image(); 
 
    img.onload = split_4; 
 
    img.src = imgData; 
 
    $('#imagediv').append(img); 
 

 
} 
 

 

 
function split_4() { 
 

 
      
 
    alert('did something happen?') 
 

 
     }; 
 

 
/** 
 
* The event handler for the link's onclick event. We give THIS as a 
 
* parameter (=the link element), ID of the canvas and a filename. 
 
*/ 
 
document.getElementById('download').addEventListener('click', function() { 
 
    downloadCanvas(this, 'canvas', 'test.png'); 
 
}, false); 
 

 
/** 
 
* Draw something to canvas 
 
*/ 
 
doCanvas();
\t body { 
 
\t  background-color:#555557; 
 
\t  padding:0; 
 
\t  margin:0; 
 
\t  overflow:hidden; 
 
\t  font-family:sans-serif; 
 
\t  -webkit-user-select: none; 
 
\t  -khtml-user-select: none; 
 
\t  -moz-user-select: none; 
 
\t  -ms-user-select: none; 
 
\t  user-select: none; 
 
\t } 
 
\t canvas { 
 
\t  border:1px solid #000; 
 
\t  float:left; 
 
\t  clear:both; 
 
\t } 
 
\t #download { 
 
\t  float:left; 
 
\t  cursor:pointer; 
 
\t  color:#ccc; 
 
\t  padding:3px; 
 
\t } 
 
\t #download:hover { 
 
\t  color:#fff; 
 
\t } 
 
\t /* 
 
\t div, input { 
 
\t  font-size:16px; 
 
\t  font-family:sans-serif; 
 
\t  border:1px solid #000; 
 
\t  border-radius: 5px; 
 
\t  float:left; 
 
\t  padding:5px; 
 
\t  width:50px; 
 
\t  margin:1px 1px; 
 
\t  background-color:#bbb; 
 
\t } 
 
\t input[type='text'] { 
 
\t  font-size:16px; 
 
\t  font-weight:bold; 
 
\t  width:70px; 
 
\t  text-align:center; 
 
\t  background-color:#fff; 
 
\t  padding-bottom:4px; 
 
\t } 
 
\t input[type='button'] { 
 
\t  font-size:16px; 
 
\t  font-weight:bold; 
 
\t  width:110px; 
 
\t  text-align:center; 
 
\t  background-color:#333; 
 
\t  color:#eee; 
 
\t  padding-bottom:4px; 
 
\t } 
 
\t input[type='button']:hover { 
 
\t  background-color:#fff463; 
 
\t  color:#000; 
 
\t } 
 
\t input[type='range'] { 
 
\t  width:100px; 
 
\t  margin:0 0 0 10px; 
 
\t } 
 
*/ 
 
\t
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<a id="download">Click to Create and Append Image from Canvas Element</a> 
 
<canvas width="500" height="300" id="canvas">Sorry, no canvas available</canvas> 
 
<div id="imagediv"></div>