JS中使用cavas截图网页并解决跨域及模糊问题
前几天给了个需求对浏览器网页进行截图,把网页统计数据图形表等截图保存至用户本地。
首先对于网页截图,我用的是canvas实现,获取你需要截图的模块的div,从而使用canvas对你需要的模块进行截图。
我们先来引入canvas的js文件,js文件获取地址官网主页:http://html2canvas.hertzen.com/
div按钮代码
//href用来取到值要写个空download是下载图片出来的名称下载按钮
jsp代码
functiontest(){ varcanvas2=document.createElement("canvas");//创建一个新的canvas let_canvas=document.querySelector('#dijit__TemplatedMixin_0');//这里面填写你需要截图的div varw=parseInt(window.getComputedStyle(_canvas).width); varh=parseInt(window.getComputedStyle(_canvas).height); canvas2.width=w*2; canvas2.height=h*2;//将canvas画布放大2倍或者更多,然后盛放在较小的容器内,就显得不模糊了 canvas2.style.width=w+"px"; canvas2.style.height=h+"px"; varcontext=canvas2.getContext("2d"); context.scale(2,2);//指图片偏移 html2canvas(document.querySelector('#dijit__TemplatedMixin_0'),{//写需要截图的div taintTest:false, useCORS:true, allowTaint:false,//这三串代码解决跨域问题 canvas:canvas2 }).then( function(canvas){ document.querySelector("#down").setAttribute('href',canvas.toDataURL());//down设置为你的点击键 }); window.onload=test;
截图出来后,由于我的网址上有百度地图的api,地图图片等等一些东西,用canvas网页进行截图是就会发现所有图片的地方都是空白。这就是因为跨域。
来讲一下跨域问题,我举个例子说明这个跨域,比如我的网页里面有的图片不是来自于自己的服务器。那么,这张图片就和这个网页不是同域,那么html2canvas就无法对这种图片进行截图,如果你的网站的所有图片都放在单独的图片服务器上,那么用html2canvas对整个网页进行截图是就会发现所有图片的地方都是空白。
跨域问题网上好多大佬说用代理服务器来解决,但是感觉太麻烦,后来我使用了小段代码就OK了。
taintTest:false, useCORS:true, allowTaint:false, //注:useCORS:true和allowTaint:true这两个都是来解决跨域问题的,但是并不可以一起使用,如果同时使用会出现错误。
对于截图模糊就调整canvas画布大小比如我上面写的*2,画布调大,容器小,截图自然就清楚了
截图成功呈现
总结
以上所述是小编给大家介绍的JS中使用cavas截取网页并解决跨区及模糊问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!