【问题标题】:Draw content to canvas将内容绘制到画布
【发布时间】:2015-04-10 11:59:12
【问题描述】:

如何在不使用 html2canvas 之类的插件的情况下将以下内容绘制到画布上?

jsFiddle

<div id="test">
    asadasd <br />
    fsdf<br />
    sdfsd<br />
    sdfsdfsdf<br />
</div>
<canvas id="myCanvas" width="150" height="150" style="border:1px solid #d3d3d3;"></canvas>

js:

function myCanvas() {
    var c = document.getElementById("myCanvas");
    var ctx = c.getContext("2d");
    var img = document.getElementById("test");
    ctx.drawImage(img,10,10);
}

【问题讨论】:

标签: javascript jquery html canvas html2canvas


【解决方案1】:

您不能将 HTML 作为变量发送到画布对象。这是非法的。实际上print-screen 某人对页面的更改并将该图像发送到服务器会非常容易。如果不这样做动态 (HTML>var),你可以使用foreignObject *Docs

var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');

var data = '<svg xmlns="http://www.w3.org/2000/svg" width="200" height="200">' +
    '<foreignObject width="100%" height="100%">' +
    '<div xmlns="http://www.w3.org/1999/xhtml" id="test" style="font-size:16px; background:gold;">'+
    'asadasd <br />' +
    'fsdf<br />' +
    'sdfsd<br />' +
    'sdfsdfsdf<br />' +
    '</div>' +
    '</foreignObject>' +
    '</svg>';

var DOMURL = window.URL || window.webkitURL || window;

var img = new Image();
var svg = new Blob([data], {type: 'image/svg+xml;charset=utf-8'});
var url = DOMURL.createObjectURL(svg);

img.onload = function () {
  ctx.drawImage(img, 0, 0);
  DOMURL.revokeObjectURL(url);
};

img.src = url;
&lt;canvas id="myCanvas" width="150" height="150" style="border:1px solid #d3d3d3;"&gt;&lt;/canvas&gt;

【讨论】:

  • 谢谢。如何使用 ?我需要将它包裹在每个文本周围吗?如果你能用我上面的文字 Fiddle 给我看一个例子,不胜感激。
  • @Beki 添加了一个示例。我知道您现在会尝试将 HTML 设置为 var c = "&lt;div&gt;...." Don't。你不能。 :)
  • 为什么文字没有在画布上播种?
  • @Beki 你用什么浏览器? (在 Chrome 中为我显示)
  • 我通常使用 chrome 但在这种情况下我使用的是 IE 11
猜你喜欢
  • 1970-01-01
  • 2011-07-27
  • 2012-11-26
  • 2016-12-08
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
相关资源
最近更新 更多