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

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="./node_modules/html2canvas/dist/html2canvas.js"></script>
    <script type="text/javascript"
        src="http://api.map.baidu.com/api?type=webgl&v=1.0&ak=你的百度地图key"></script>
    <title>屏幕截图</title>
</head>

<body>
    <div id="allmap" style="width: 100%;height: 500px;">

    </div>
    <div id="capture" style="padding: 10px; background: #f5da55">
        <h4 style="color: #000; ">Hello world!</h4>
    </div>
    <button id="btnClick" onclick="btnClick()"
        style="width: 80px;height: 30px;border-radius: 3px;border: none;margin-top: 20px;background-color: #43e83e;color: #fff;cursor: pointer;">截图</button>
</body>

</html>
<script>

        // 按住鼠标右键,修改倾斜角和角度
        var map = new BMapGL.Map("allmap");    // 创建Map实例
        map.centerAndZoom(new BMapGL.Point(116.404, 39.915), 11);  // 初始化地图,设置中心点坐标和地图级别
        map.enableScrollWheelZoom(true);

        //解决百度地图截图后空白问题
        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);

        var btnClick = () => {
            html2canvas(document.querySelector("#allmap")).then(canvas => {
                document.body.appendChild(canvas)
                downLoad(saveAsPNG(canvas));
            });
        }

        // 保存成png格式的图片
        var saveAsPNG = (canvas) => {
            return canvas.toDataURL("image/png");
        }

        // 保存成jpg格式的图片
        var saveAsJPG = (canvas) => {
            return canvas.toDataURL("image/jpeg");
        }

        // 下载文件
        var downLoad = (url) => {
            var oA = document.createElement("a");
            oA.download = '';// 设置下载的文件名,默认是'下载'
            oA.href = url;
            document.body.appendChild(oA);
            oA.click();
            oA.remove(); // 下载之后把创建的元素删除
        }


</script>

图片截图时空白处理方法

给img标签加上crossOrigin="anonymous"属性

然后

服务端开启跨域response.setHeader("Access-Control-Allow-Origin","*");

并且开启CORS(重要)

前端等图片加载完后再截图(重要)

useCORS记得开起来,很重要!!!

html2canvas(document.body,{
		useCORS: true,
	}).then(canvas => {
		// document.body.appendChild(canvas)
		downLoad(saveAsPNG(canvas));
	});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin李宏飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值