我试图将一个相当简单的html导出到画布然后png。为此,我使用rasterizeHTML(http://cburgmer.github.io/rasterizeHTML.js/)。 我面临的问题是,我得到一个警告,就像我正在加载外部图像/资源,但我不是。 这就是我的尝试:
HTML:
<canvas height="500" width="500" id="rasterizer"></canvas>
的Javascript
var canvas=document.getElementById("rasterizer");
rasterizeHTML.drawHTML('<div width="300px" height="300px" > <div style="width: 200px;height: 200px;position: absolute;top: 50%;left: 50%;margin: -100px 0 0 -100px;"><div style="width: 100%;height: 100%;border-radius: 50%;position: absolute;top: 0;left: 0;margin: 0;z-index: 1;background: #e4f1ea; "> </div> <div style="border-radius: 50%;position: absolute;top: 50%;left: 50%;z-index: 3;background: #b6cfe1;width:73.997475122531%; height:73.997475122531%; margin:-36.998737561265% 0 0 -36.998737561265%"></div> </div></div>',canvas);
canvas.toDataURL("image/png");
html只渲染2个圆圈,一个在另一个之上。 Rasterizer能够在画布中显示这一点没有问题,但是当我尝试运行.toDataURL时,我最终遇到了两个问题之一:
我没有想法,因为这应该发生在外部资源上,而不是完全内联-html。 任何人都知道为什么会这样吗?谢谢。
答案 0 :(得分:3)
这里有两件事情可以解决:
您应该等待rasterizeHTML.drawHTML
完成,然后才能从画布中获取任何内容:
rasterizeHTML.drawHTML('<div...', canvas, function () {
var dataUrl = canvas.toDataURL("image/png");
console.log(dataUrl);
});
Safari&amp;一旦在那里绘制了HTML(实际上是SVG),Webkit就无法从画布上回读。见https://github.com/cburgmer/rasterizeHTML.js/wiki/Browser-issues#wiki-webkit。已经向Chrome和Safari提交了一个错误(再次,请参阅链接),但在此之前,Firefox很遗憾是唯一允许您阅读表单的浏览器。