百度地图3.0截图,下载(解决图形下载偏移的问题)

2024-06-15 02:52

本文主要是介绍百度地图3.0截图,下载(解决图形下载偏移的问题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

百度地图应用3.0开发的页面,需要截图并下载的功能。前端采用html2canvas生成base64图片

由于百度地图绘制多边形是svg,而html2canvas不支持生成。不绘制线的截图是正常的,绘制了线条就会出现偏移。以下是对比,上一张是正常的,下一张是使用html2canvas截图,会偏移

搜索了很多方法,又说用canvg的,试了下要么报错,要么空白,没用,最后找到用rasterizehtml进行转换,将dom中的目标svg转换为canvas。发现可以实现想要的需求

具体实现就是: 通过id,获取地图div下的svg(变量备份一份svg的dom数据),转换为canvas,然后进行截图,需要注意,在替换时,需要延迟进行html2canvas截图,否则页面渲染未完成,截图截的是空白的。待截图完成,下载后。再将转换的canvas替换回svg,一定要替换回去。否则再次在地图上操作,会发现,地图上的线条不再跟随地图了,成静态的了。

有一点需要注意,html2canvas截图,图片跨域会截图不了,会空白,所以要么服务器允许跨域,要么设置代理。

 # 允许跨域访问的配置
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

以下是步骤:

1。安装html2canvas ,rasterizehtml

2.页面引用

import html2canvas from 'html2canvas'
import rasterizeHTML from 'rasterizehtml'

3.实现代码,地图父级div写入id即可

  downImage(idStr = 'baiduMapId') {// 备份原始的svg元素const svgBackups = []// 获取全部的svgconst reportElement = document.getElementById(idStr)//   const reportElement = document.getElementById(idStr)const svgElems = reportElement.querySelectorAll('svg')console.log(svgElems)if (svgElems.length !== 0) {svgElems.forEach((item, index) => {// 获取svg的父元素const parentNode = item.parentNode// 获取svg内容及样式const svgHTML = (item.outerHTML || new XMLSerializer().serializeToString(item)).trim()const svgStyles = getComputedStyle(item)// 创建canvas元素,并根据svg设置宽const canvas = document.createElement('canvas')canvas.width = parseInt(svgStyles.width, 10)canvas.height = parseInt(svgStyles.height, 10)// 生成canvasrasterizeHTML.drawHTML(svgHTML, canvas)// 使用canvas代替svgparentNode.removeChild(item)parentNode.appendChild(canvas)// 备份原始的svg元素svgBackups.push({ parentNode, svgElement: item })})}setTimeout(() => {html2canvas(document.querySelector('#' + idStr), {useCORS: true,preserveDrawingBuffer: true,// foreignObjectRendering: true,allowTaint: true,scrollY: 0,scale: 1}).then(canvas => {const imgUrl = canvas.toDataURL('image/png')console.log(imgUrl)// 创建一个临时的 <a> 元素const link = document.createElement('a')link.href = imgUrl// 设置下载的文件名link.download = 'screenshot.png'// 模拟点击链接进行下载document.body.appendChild(link)link.click()document.body.removeChild(link)/* if (svgBackups.length !== 0) {// 将canvas元素替换回原来的svg元素svgBackups.forEach(({ parentNode, svgElement }) => {parentNode.removeChild(parentNode.querySelector('canvas'))parentNode.appendChild(svgElement)})} */})}, 2000)},

这篇关于百度地图3.0截图,下载(解决图形下载偏移的问题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062229

相关文章

IDEA和GIT关于文件中LF和CRLF问题及解决

《IDEA和GIT关于文件中LF和CRLF问题及解决》文章总结:因IDEA默认使用CRLF换行符导致Shell脚本在Linux运行报错,需在编辑器和Git中统一为LF,通过调整Git的core.aut... 目录问题描述问题思考解决过程总结问题描述项目软件安装shell脚本上git仓库管理,但拉取后,上l

解决docker目录内存不足扩容处理方案

《解决docker目录内存不足扩容处理方案》文章介绍了Docker存储目录迁移方法:因系统盘空间不足,需将Docker数据迁移到更大磁盘(如/home/docker),通过修改daemon.json配... 目录1、查看服务器所有磁盘的使用情况2、查看docker镜像和容器存储目录的空间大小3、停止dock

idea npm install很慢问题及解决(nodejs)

《ideanpminstall很慢问题及解决(nodejs)》npm安装速度慢可通过配置国内镜像源(如淘宝)、清理缓存及切换工具解决,建议设置全局镜像(npmconfigsetregistryht... 目录idea npm install很慢(nodejs)配置国内镜像源清理缓存总结idea npm in

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

idea突然报错Malformed \uxxxx encoding问题及解决

《idea突然报错Malformeduxxxxencoding问题及解决》Maven项目在切换Git分支时报错,提示project元素为描述符根元素,解决方法:删除Maven仓库中的resolv... 目www.chinasem.cn录问题解决方式总结问题idea 上的 maven China编程项目突然报错,是

在Ubuntu上打不开GitHub的完整解决方法

《在Ubuntu上打不开GitHub的完整解决方法》当你满心欢喜打开Ubuntu准备推送代码时,突然发现终端里的gitpush卡成狗,浏览器里的GitHub页面直接变成Whoathere!警告页面... 目录一、那些年我们遇到的"红色惊叹号"二、三大症状快速诊断症状1:浏览器直接无法访问症状2:终端操作异常

mybatis直接执行完整sql及踩坑解决

《mybatis直接执行完整sql及踩坑解决》MyBatis可通过select标签执行动态SQL,DQL用ListLinkedHashMap接收结果,DML用int处理,注意防御SQL注入,优先使用#... 目录myBATiFBNZQs直接执行完整sql及踩坑select语句采用count、insert、u

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

前端导出Excel文件出现乱码或文件损坏问题的解决办法

《前端导出Excel文件出现乱码或文件损坏问题的解决办法》在现代网页应用程序中,前端有时需要与后端进行数据交互,包括下载文件,:本文主要介绍前端导出Excel文件出现乱码或文件损坏问题的解决办法,... 目录1. 检查后端返回的数据格式2. 前端正确处理二进制数据方案 1:直接下载(推荐)方案 2:手动构造

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT