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 相关文章推荐
JS实现遮罩层效果的简单实例
Nov 12 Javascript
jquery实现像栅栏一样左右滑出式二级菜单效果代码
Aug 24 Javascript
AngularJs Injecting Services Into Controllers详解
Sep 02 Javascript
HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
Oct 31 Javascript
浅谈js原生拖放
Nov 21 Javascript
jQuery获取Table某列的值(推荐)
Mar 03 Javascript
js中的DOM模拟购物车功能
Mar 22 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
Jun 20 Javascript
JSON对象转化为字符串详解
Aug 11 Javascript
Vue 组件修改根实例的数据的方法
Apr 02 Javascript
Vue.js中的组件系统
May 30 Javascript
layui监听select变化,以及设置radio选中的方法
Sep 24 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 MSSQL 分页实例
2016/04/13 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
PHP实现基于面向对象的mysqli扩展库增删改查操作工具类
2017/07/18 PHP
jquery 漂亮的删除确认和提交无刷新删除示例
2013/11/13 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
2017/01/23 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
form表单序列化详解(推荐)
2017/08/15 Javascript
jQuery判断网页是否已经滚动到浏览器底部的实现方法
2017/10/27 jQuery
浅谈AngularJs 双向绑定原理(数据绑定机制)
2017/12/07 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
解决await在forEach中不起作用的问题
2021/02/25 Javascript
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
python登录豆瓣并发帖的方法
2015/07/08 Python
Django的HttpRequest和HttpResponse对象详解
2018/01/26 Python
Python使用pylab库实现绘制直方图功能示例
2018/06/01 Python
Python实现的knn算法示例
2018/06/14 Python
tensorflow更改变量的值实例
2018/07/30 Python
python设计微型小说网站(基于Django+Bootstrap框架)
2019/07/08 Python
Pytorch自己加载单通道图片用作数据集训练的实例
2020/01/18 Python
如何基于windows实现python定时爬虫
2020/05/01 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
查摆问题自我剖析材料
2014/08/18 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2014村书记党建工作汇报材料
2014/11/02 职场文书
爱护环境卫生倡议书
2015/04/29 职场文书
趣味运动会通讯稿
2015/07/18 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
《烈火英雄》观后感:致敬和平时代的英雄
2019/11/11 职场文书
详解Python生成器和基于生成器的协程
2021/06/03 Python