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 相关文章推荐
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
Jun 02 Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 Javascript
10款非常有用的 Ajax 插件分享
Mar 14 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
Feb 10 Javascript
详解maxlength属性在textarea里奇怪的表现
Dec 27 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
微信小程序 swiper组件轮播图详解及实例
Nov 16 Javascript
Angular限制input框输入金额(是小数的话只保留两位小数点)
Jul 13 Javascript
vue 2.0项目中如何引入element-ui详解
Sep 06 Javascript
如何理解Vue的v-model指令的使用方法
Jul 19 Javascript
学习RxJS之JavaScript框架Cycle.js
Jun 17 Javascript
详细分析Node.js 多进程
Jun 22 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经典实用正则表达式小结
2017/05/04 PHP
PHP中cookie知识点学习
2018/05/06 PHP
详解PHP实现支付宝小程序用户授权的工具类
2018/12/25 PHP
SWFObject Flash js调用类
2008/07/08 Javascript
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
浅谈javascript语法和定时函数
2015/05/03 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
vue+php实现的微博留言功能示例
2019/03/16 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python del()函数用法
2013/03/24 Python
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
Python选课系统开发程序
2016/09/02 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
简单了解python协程的相关知识
2019/08/31 Python
Django通过设置CORS解决跨域问题
2020/11/26 Python
快速创建python 虚拟环境
2020/11/28 Python
利用CSS3把图片变成灰色模式的实例代码
2016/09/06 HTML / CSS
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
大学生标准推荐信范文
2013/11/25 职场文书
体育教育专业自荐信范文
2013/12/20 职场文书
大学生实习思想汇报
2014/01/12 职场文书
社区消防工作实施方案
2014/03/21 职场文书
施工安全承诺书
2014/05/22 职场文书
公司委托书格式
2014/08/01 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
2014年幼儿园小班工作总结
2014/12/04 职场文书
高中班主任评语
2014/12/30 职场文书
2015年挂职干部工作总结
2015/05/14 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
Redis入门基础常用操作命令整理
2022/06/01 Redis