由于高德官方没有导出图片的方法,所以只能用html2canvas
来导出图片了。
<!--定义地图容器-->
<div id="map"></div>
// 使用html2canvas导出图片
function saveImg(){
html2canvas(document.getElementById('map')).then((canvas) => {
const dataUrl = canvas.toDataURL('image/jpeg')
dataURIToBlob(`图片.jpg`, dataUrl, downloadImg)
}).finally(() => {}
})
// 处理blob数据
function dataURIToBlob(imgName, dataURI, callback) {
const binStr = atob(dataURI.split(',')[1])
const len = binStr.length
const arr = new Uint8Array(len)
for (let i = 0; i < len; i++) {
arr[i] = binStr.charCodeAt(i)
}
callback(imgName, new Blob([arr]))
}
// 下载图片
function downloadImg(imgName, blob) {
const link = document.createElement('a')
link.style.display = 'none'
link.href = URL.createObjectURL(blob)
link.download = imgName
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
}
警告
通过上面的办法,导出的地图会是空白图片。 一定要加上下面的原型链拓展,才可以正常导出。
HTMLCanvasElement.prototype.getContext = (function (origFn) {
return function (type, attributes) {
if (type === 'webgl') {
attributes = Object.assign({}, attributes, {
preserveDrawingBuffer: true
})
}
return origFn.call(this, type, attributes)
}
})(HTMLCanvasElement.prototype.getContext)