JS中使用cavas截图网页并解决跨域及模糊问题


Posted in Javascript onNovember 13, 2018

前几天给了个需求对浏览器网页进行截图,把网页统计数据图形表等截图保存至用户本地。

首先对于网页截图,我用的是canvas实现,获取你需要截图的模块的div,从而使用canvas对你需要的模块进行截图。

我们先来引入canvas的js文件,js文件获取地址官网主页:http://html2canvas.hertzen.com/

<script type="text/javascript" src="js/html2canvas.js"></script>
<script type="text/javascript" src="js/html2canvas.min.js"></script>

div按钮代码

<div><a id="down" href="" download=" rel="external nofollow" downImg">下载按钮</a></div>
//href用来取到值 要写个空 down load是下载图片出来的名称

jsp代码

function test() {

 var canvas2 = document.createElement("canvas");    


 //创建一个新的canvas
  let _canvas = document.querySelector('#dijit__TemplatedMixin_0');

  //这里面填写 你需要截图的div
  var w = parseInt(window.getComputedStyle(_canvas).width);

  var h = 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";       
  var context = 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截取网页并解决跨区及模糊问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
点图片上一页下一页翻页效果
Jul 09 Javascript
javascript html 静态页面传参数
Apr 10 Javascript
鼠标经过的文本框textbox变色
May 21 Javascript
JavaScript创建对象的方式小结(4种方式)
Dec 17 Javascript
关于JavaScript中事件绑定的方法总结
Oct 26 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
javascript 网页进度条简单实例
Feb 22 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
Jul 04 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
Sep 30 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
Vue项目使用CDN优化首屏加载问题
Apr 01 Javascript
微信小程序云开发之数据库操作
May 18 Javascript
详解如何用typescript开发koa2的二三事
Nov 13 #Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
Nov 13 #Javascript
koa源码中promise的解读
Nov 13 #Javascript
vue-router传递参数的几种方式实例详解
Nov 13 #Javascript
vue-router的使用方法及含参数的配置方法
Nov 13 #Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 #Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 #Javascript
You might like
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
php数字游戏 计算24算法
2012/06/10 PHP
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PDO::getAttribute讲解
2019/01/28 PHP
jQuery 动画基础教程
2008/12/25 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
js使用for循环与innerHTML获取选中tr下td值
2014/09/26 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
JavaScript中动态向表格添加数据
2017/01/24 Javascript
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
微信小程序实现的绘制table表格功能示例
2019/04/26 Javascript
如何实现js拖拽效果及原理解析
2020/05/08 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
Python实现的下载网页源码功能示例
2017/06/13 Python
基于Python log 的正确打开方式
2018/04/28 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
Python OpenCV实现视频分帧
2019/06/01 Python
pyqt5与matplotlib的完美结合实例
2019/06/21 Python
Django中Middleware中的函数详解
2019/07/18 Python
浅析PyTorch中nn.Module的使用
2019/08/18 Python
python框架django项目部署相关知识详解
2019/11/04 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
医学护理系毕业生求职信
2013/10/01 职场文书
《影子》教学反思
2014/02/21 职场文书
药品业务员岗位职责
2014/04/17 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2015年推普周活动方案
2015/05/06 职场文书
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
mapstruct的用法之qualifiedByName示例详解
2022/04/06 Java/Android
关于pytest结合csv模块实现csv格式的数据驱动问题
2022/05/30 Python
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android