• 使用html2canvas 进行屏幕截图(附带解决截百度地图时空白问题)


    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <script src="./node_modules/html2canvas/dist/html2canvas.js">script>
    8. <script type="text/javascript"
    9. src="http://api.map.baidu.com/api?type=webgl&v=1.0&ak=你的百度地图key">script>
    10. <title>屏幕截图title>
    11. head>
    12. <body>
    13. <div id="allmap" style="width: 100%;height: 500px;">
    14. div>
    15. <div id="capture" style="padding: 10px; background: #f5da55">
    16. <h4 style="color: #000; ">Hello world!h4>
    17. div>
    18. <button id="btnClick" onclick="btnClick()"
    19. style="width: 80px;height: 30px;border-radius: 3px;border: none;margin-top: 20px;background-color: #43e83e;color: #fff;cursor: pointer;">截图button>
    20. body>
    21. html>
    22. <script>
    23. // 按住鼠标右键,修改倾斜角和角度
    24. var map = new BMapGL.Map("allmap"); // 创建Map实例
    25. map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11); // 初始化地图,设置中心点坐标和地图级别
    26. map.enableScrollWheelZoom(true);
    27. //解决百度地图截图后空白问题
    28. HTMLCanvasElement.prototype.getContext = function (origFn) {
    29. return function (type, attributes) {
    30. if (type === 'webgl') {
    31. attributes = Object.assign({}, attributes, {
    32. preserveDrawingBuffer: true,
    33. });
    34. }
    35. return origFn.call(this, type, attributes);
    36. };
    37. }(HTMLCanvasElement.prototype.getContext);
    38. var btnClick = () => {
    39. html2canvas(document.querySelector("#allmap")).then(canvas => {
    40. document.body.appendChild(canvas)
    41. downLoad(saveAsPNG(canvas));
    42. });
    43. }
    44. // 保存成png格式的图片
    45. var saveAsPNG = (canvas) => {
    46. return canvas.toDataURL("image/png");
    47. }
    48. // 保存成jpg格式的图片
    49. var saveAsJPG = (canvas) => {
    50. return canvas.toDataURL("image/jpeg");
    51. }
    52. // 下载文件
    53. var downLoad = (url) => {
    54. var oA = document.createElement("a");
    55. oA.download = '';// 设置下载的文件名,默认是'下载'
    56. oA.href = url;
    57. document.body.appendChild(oA);
    58. oA.click();
    59. oA.remove(); // 下载之后把创建的元素删除
    60. }
    61. script>

    图片截图时空白处理方法

    1. 给img标签加上crossOrigin="anonymous"属性
    2. 然后
    3. 服务端开启跨域response.setHeader("Access-Control-Allow-Origin","*");
    4. 并且开启CORS(重要)
    5. 前端等图片加载完后再截图(重要)
    6. useCORS记得开起来,很重要!!!
    7. html2canvas(document.body,{
    8. useCORS: true,
    9. }).then(canvas => {
    10. // document.body.appendChild(canvas)
    11. downLoad(saveAsPNG(canvas));
    12. });

  • 相关阅读:
    运筹说 第72期 | 算法介绍之动态规划(二)
    实验(四):指令部件实验
    Ubuntu系统anaconda安装初始化和env环境切换
    场景之分页查询设计
    毕业设计 STM32远程车锁控制系统 -物联网 单片机
    Python leetcode468:验证ip地址,解法
    AIGC|数字时代巨变,创新潮流涌现,万亿市值风口已开!
    Python包:包的概念、2种建立包方式、包的使用(代码 + 图文)
    前端菜鸟浅谈Web前端开发技术
    2022前端面试题上岸手册-Vue部分
  • 原文地址:https://blog.csdn.net/qq_35017350/article/details/128199354