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以对象为索引的关联数组
Jul 04 Javascript
JQuery表格内容过滤的实现方法
Jul 05 Javascript
jQuery知识点整理
Jan 30 Javascript
Javascript中arguments用法实例分析
Jun 13 Javascript
js严格模式总结(分享)
Aug 22 Javascript
利用BootStrap弹出二级对话框的简单实现方法
Sep 21 Javascript
jQuery DOM节点的遍历方法小结
Aug 15 jQuery
基于Vue2实现简易的省市区县三级联动组件效果
Nov 05 Javascript
javascript实现函数柯里化与反柯里化过程解析
Oct 08 Javascript
Vue实现将数据库中带html标签的内容输出(原始HTML(Raw HTML))
Oct 28 Javascript
JS实现简单移动端鼠标拖拽
Jul 23 Javascript
VUE中setTimeout和setInterval自动销毁案例
Sep 07 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 strcmp使用说明
2010/04/22 PHP
微信access_token的获取开发示例
2015/04/16 PHP
深入研究PHP中的preg_replace和代码执行
2018/08/15 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
JavaScript 面向对象之命名空间
2010/05/04 Javascript
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
加载远程图片时,经常因为缓存而得不到更新的解决方法(分享)
2013/06/26 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
JS实现超简单的仿QQ折叠菜单效果
2015/09/21 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
jQuery表单插件ajaxForm实例详解
2017/01/17 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
vue-router路由懒加载的实现(解决vue项目首次加载慢)
2018/08/28 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
vue组件开发之slider组件使用详解
2020/08/21 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
Python操作串口的方法
2015/06/17 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
毕业生的求职信范文分享
2013/12/04 职场文书
点菜员岗位职责范本
2014/02/14 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
学校宣传标语
2014/06/18 职场文书
危货运输企业安全生产责任书
2014/07/28 职场文书
病房管理制度范本
2015/08/06 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
ubuntu安装jupyter并设置远程访问的实现
2022/03/31 Python
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技