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 相关文章推荐
javascipt基础内容--需要注意的细节
Apr 10 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
使用AngularJS创建自定义的过滤器的方法
Jun 18 Javascript
JavaScript函数的调用以及参数传递
Oct 21 Javascript
利用JavaScript实现拖拽改变元素大小
Dec 14 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
微信小程序中显示html格式内容的方法
Apr 25 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
Jun 03 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 Javascript
JavaScript中常见内置函数用法示例
May 14 Javascript
用Node提供静态文件服务的方法
Jul 06 Javascript
react项目实践之webpack-dev-serve
Sep 14 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
《Pokemon Sword·Shield》系列WEB动画《薄明之翼》第2话声优阵容公开!
2020/03/06 日漫
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
2012/08/31 PHP
领悟php接口中interface存在的意义
2013/06/27 PHP
ThinkPHP模板IF标签用法详解
2014/07/01 PHP
浅谈PHP中其他类型转化为Bool类型
2016/03/28 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
Jquery取得iframe下内容的方法
2013/11/18 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
jQuery设置Cookie及删除Cookie实例分析
2016/04/15 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
ant design实现圈选功能
2019/12/17 Javascript
vue实现购物车结算功能
2020/06/18 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
JS addEventListener()和attachEvent()方法实现注册事件
2021/01/11 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
python中的闭包函数
2018/02/09 Python
实例讲解python中的序列化知识点
2018/10/08 Python
Python搭建Spark分布式集群环境
2019/07/05 Python
Tensorflow累加的实现案例
2020/02/05 Python
python词云库wordCloud使用方法详解(解决中文乱码)
2020/02/17 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
德国体育用品网上商店:SC24.com
2016/08/01 全球购物
毕业生个人的求职信范文
2013/12/03 职场文书
服装电子商务创业计划书
2014/01/30 职场文书
党的群众路线教育实践活动个人对照检查材料范文
2014/09/25 职场文书
考察邀请函范文
2015/01/31 职场文书
导游词之海南天涯海角
2019/12/05 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang
react合成事件与原生事件的相关理解
2021/05/13 Javascript