我提到以下SO问题捕获使用JavaScript(html2canvas)谷歌地图的屏幕截图。 feedback.js , 屏幕捕捉,使用-html2canvas , 创建-屏幕截图 , 捕捉-DIV-成图像 , html2canvas,github上 。
我使用的静态映射来获得图像,但我有近150个标记和URL的总长度就远远超出了2048个字符的限制。
我能够捕捉到使用事件侦听器在JavaScript中的截图。 我用来捕捉图像的代码如下。 我试着用window.save,但在html2canvas.js没有这样的方法。 如何将图像保存到本地文件系统有什么建议?
function takeImage() {
html2canvas($("#map-canvas"), {
onrendered: function( canvas ) {
var img = canvas.toDataURL("image/png")
window.open(img);
//window.save(img); /*does not work.*/
}
});
}
事件监听器:
google.maps.event.addListener(map, 'tilesloaded', function() {
takeImage();
});
我有问题,IE9,并在Chrome中,一些图像被下载,但他们已损坏。 我发现IE9是一个新的标签页上打开图像唯一的解决办法,那么我就能够点击右键并另存为。 我使用html2canvas作出下载下一个代码的格区域(映射的容器)作为图像。
function download_image() {
if($.browser.safari) {// Fix for Chrome
var transform=$(".gm-style>div:first>div").css("transform");
var comp=transform.split(","); //split up the transform matrix
var mapleft=parseFloat(comp[4]); //get left value
var maptop=parseFloat(comp[5]); //get top value
$(".gm-style>div:first>div").css({ //get the map container. not sure if stable
"transform":"none",
"left":mapleft,
"top":maptop,
});
}
html2canvas([$("#div_id")[0]], {
logging: false,
useCORS: true,
onrendered: function (canvas) {
if ($("#downloadimg").length > 0)
$("#downloadimg").remove();
var fileName = "file_name.png";
if (/\bMSIE|Trident\b/.test(navigator.userAgent) && $.browser.version.match(/9.0|10.0|11.0/)) {//Only for IE 9, 10 and 11
download_image_IE(canvas, fileName);
}
else {
$("body").append("<a id='downloadimg' download='" + fileName + "' href='" + canvas.toDataURL("image/png").replace("image/png", "image/octet-stream") + "'><a/>");
}
if ($("#downloadimg").length > 0)
$("#downloadimg")[0].click();
if($.browser.safari) {// Fix for Chrome
$(".gm-style>div:first>div").css({
left:0,
top:0,
"transform":transform
});
}
}
});
}
function download_image_IE(canvas, filename) {
if ($.browser.version.match(/9.0/)){ //Only for IE9
var w = window.open();
$(w.document.body).html('<img src="'+ canvas.toDataURL() +'"/>');
}
else{
var image = canvas.toDataURL();
image = image.substring(22); // remove data stuff
var byteString = atob(image);
var buffer = new ArrayBuffer(byteString.length);
var intArray = new Uint8Array(buffer);
for (var i = 0; i < byteString.length; i++) {
intArray[i] = byteString.charCodeAt(i);
}
var blob = new Blob([buffer], { type: "image/png" });
window.navigator.msSaveOrOpenBlob(blob, filename);
}
}