javascript - 在 OpenLayer 3 + Javascript 中无法导出 map

标签 javascript openlayers-3

我正在尝试导出 map ,但我总是遇到同样的错误:

Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported.

我有以下代码:

var canvas = event.context.canvas;
var exportPNGElement = document.createElement('a');
exportPNGElement.download = 'Mapa.png';
exportPNGElement.href = canvas.toDataURL('image/png');
document.body.appendChild(exportPNGElement);
exportPNGElement.click();
document.body.removeChild(exportPNGElement);

怎么了?你有什么想法吗?

最佳答案

老实说,我没有回答你的问题。我没有检查为什么你的例子不起作用。但我建议使用不同的方法:

canvas.toDataUrl 非常不可靠,因为浏览器会根据导出文件的大小崩溃。它只适用于非常轻量级的 map 。对于大多数现实生活中的应用程序,您将不得不使用 canvas.toBlob

关于 canvas.toBlob 的更多信息:https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob

canvas.toBlob 适用于 Firefox ( https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob#Browser_compatibility ),很快将在 Chrome ( https://code.google.com/p/chromium/issues/detail?id=67587#c101 ) 中实现。

同时,您可以使用 canvas-toBlob ( https://github.com/eligrey/canvas-toBlob.js ) 和 FileSaver.js ( https://github.com/eligrey/FileSaver.js )。

请看这里的例子:

我已经使用这种方法成功下载了 8MB 的 png 文件。

我已经打开了一个请求使用 canvas.toBlob 添加示例的问题:https://github.com/openlayers/ol3/issues/2968

关于javascript - 在 OpenLayer 3 + Javascript 中无法导出 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32040633/

相关文章:

javascript - 与 child 一起最安全、最高效地去除元件

javascript - 使用 PhantomJS 注入(inject) Javascript 的正确语法是什么?

javascript - JQuery .center 不是一个函数

openlayers-3 - 使用不同颜色设置 multiLineString 样式

openlayers - OpenLayers 5 和 OpenLayers 6 的区别

javascript - OpenLayers 3 - map 顶部的 Div 未捕获点击

javascript - 如何获取开放层中向量层内的向量元素数量3

javascript - 丢弃空格或空字符

javascript - Firebase实时数据库: how to check if child value exists

openlayers-3 - LineString 和 multiLine openlayers 3