【发布时间】:2014-12-11 17:23:52
【问题描述】:
使用 HTML2Canvas 我正在尝试捕获 googleMap(效果很好),然后捕获位于其顶部的 #overlay div(它允许人们将图像放置在googleMap 在特定位置)(工作正常)。
然后页面会在页面上显示这两个canvas 元素,然后我想要另一个捕获这些元素,以将两个画布组合成一个图像,然后他们可以下载。
到目前为止,我遇到的问题是,当我尝试捕获我的 #preview div 时,HTML2Canvas 似乎没有拾取它创建的 canvas 元素。
HTML:
<div id="mainPanel">
<div id="overlay">
</div>
<button class="download">Download as PDF</button>
<button onclick="startEdit();" class="edit_button">Start Editing</button>
<div id="map">
<input id="pac-input" class="controls" type="text" placeholder="Search Box">
<div id="map-canvas"></div>
</div>
<div id="preview">
</div>
</div>
HTML2Canvas jQuery:
$(".download").click(function() {
html2canvas($("#map"), {
logging: true,
proxy: "https://html2canvas.appspot.com/query",
onrendered: function(canvas) {
// var img = canvas.toDataURL("image/png");
$(canvas).css({"position" : "absolute", "z-index" : "999"});
document.getElementById("preview").appendChild(canvas);
html2canvas($("#overlay"), {
logging: true,
onrendered: function(canvas1) {
// var img = canvas.toDataURL("image/png");
$(canvas1).css({"position" : "absolute", "z-index" : "1000"});
document.getElementById("preview").appendChild(canvas1);
setTimeout(function() {downloadURI()}, 5000);
}
});
}
});
});
function downloadURI() {
html2canvas($("#preview"), {
logging: true,
onrendered: function(canvas2) {
var img = canvas2.toDataURL("image/png");
window.open(img);
// var link = document.createElement("a");
// link.download = "image-download.png";
// link.href = img;
// link.click();
}
});
}
如您所见,我已尝试延迟 DownloadURI 函数,以防画布未及时加载,但这不是问题。我不确定是否有关于 canvas 元素的某些内容不适用于插件。
工作原理:我上面的代码相当简单。当一个 HTML2Canvas 完成后,它会运行另一个 HTML2Canvas。这两个画布都附加到#preview 元素,以便我可以捕获该元素,其中两个画布在其中相互重叠。完成后,它会运行另一个函数来捕获#preview 元素,我希望将这两个图像一个在另一个之上组合成一个用户可以下载的图像,但是它只是返回一个空图像。
如果需要更多信息,请告诉我,谢谢。
【问题讨论】:
-
与其创建第三个预览 div,为什么不简单地通过它们的数据合并两个图像呢?如果有可能,我可以用代码提交答案。
-
我不确定这是否可能。如果你能做到,那就太棒了! :D
标签: javascript jquery html canvas html2canvas