vue后台系统使用html2canvas截图功能的时候图片跨域不显示

解决-使用html2canvas截取页面时,页面的div背景图无法截取并跨域

示例

在这里插入图片描述

第一步安装依赖
	npm install html2canvas --save
第二步使用依赖
	import html2canvas from 'html2canvas';
第三步如何在div里面使用
	//1.常规使用在div里面使用
	
	<div class="phone" ref="phoneContent">
		<p>这里是文字标题</p>
		<img :src="staticImgUrl + 'mobile/init_t1.png'" alt=""/>
	</div>
	
	
	//2.组件使用
	
	<Phone
        :data="data"
        :selectedIndex="selectedIndex"
        @onEditer="onEditer"
        @onDeleleItem="onDeleleItem"
        ref="phoneContent"
    >
    </Phone>
第四步在methods如何调用
	onFormSubmit(){	//调用
			//1.常规使用
			const element = this.$refs.phoneContent; // 获取要截图的DOM元素
			
			//2.组件使用
			const element = this.$refs.phoneContent.$el; // 获取要截图的DOM元素
			
			// 使用的时候要区分是什么方式
			// 使用的时候要区分是什么方式
			// 使用的时候要区分是什么方式
			
			html2canvas(element,{
                dpi: window.devicePixelRatio * 2,
                useCORS: true,
                allowTaint: true,
                async: true,
            }).then((canvas) => {
				let img = new Image();
                img.src = canvas.toDataURL('image/png');
				console.log("img.src",img.src);
				// 该输出的图片是 base64的,至此就完成了截图
			});
	}
第五步使用以上代码截图里面的图片是空白如何解决
	1.修改源码 node_modules/html2canvas/dist/html2canvas.js

	    this.context.logger.debug("Added image " + key.substring(0, 256));
    	return [4 /*yield*/, new Promise(function (resolve, reject) {
            var img = new Image();
            img.onload = function () { return resolve(img); };
            img.onerror = reject;
            //ios safari 10.3 taints canvas with data urls unless crossOrigin is set to anonymous
            if (isInlineBase64Image(src) || useCORS) {
            	// 第一个修改的地方
                // img.crossOrigin = 'anonymous';	
                img.crossOrigin = '';
                // 第一个修改的地方
            }
            // img.src = src;// 第二个修改的地方

            if(src.indexOf('data:image')>-1){ // 图片地址后加时间 base64图片不变
                // base64 图片操作
                img.src = src;
            }else{
                //path 图片操作
                img.src = src+"?"+new Date().getTime();
            }
            // 第二个修改的地方

            if (img.complete === true) {
                // Inline XML images may fail to parse, throwing an Error later on
                setTimeout(function () { return resolve(img); }, 500);
            }
            if (_this._options.imageTimeout > 0) {
                setTimeout(function () { return reject("Timed out (" + _this._options.imageTimeout + "ms) loading image"); }, _this._options.imageTimeout);
            }
        })];

	// 至此该保存canvas已经完成,请多多指教,如有不符合的地方请联系我,以便及时修改	

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值