主要区别在于 Rasterize 是SVG foreignObject的包装器,而 html2canvas 本质上是从头开始重新实现浏览器 HTML 渲染。Rasterize 必须处理许多令人头疼的安全问题,但我认为它的方法更好,正如 html2canvas 的 2400 仅 950 行代码所暗示的那样。
如果您要渲染的 HTML 不是很复杂或不需要像素完美,您可以跳过 Rasterize 并直接使用 foreignObject,如MDN:将 DOM 对象绘制到画布中所述:
var canvas = document.getElementById('canvas');
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" style="font-size:40px">' +
'<em>I</em> like <span style="color:white; text-shadow:0 0 2px blue;">cheese</span>' +
'</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;