主要區別在於Rasterize是圍繞SVG foreignObject的包裝,而html2canvas本質上是從頭開始重新實現瀏覽器HTML呈現。 Rasterize需要處理很多安全問題,但我認爲它的方法更好,正如其對於html2canvas 2400只有950行代碼所暗示的那樣。
如果您渲染的HTML不是非常複雜或不需要像素完美,您可以跳過柵格化並直接使用foreignObject,如MDN: Drawing DOM objects into a canvas中所述:
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;