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来处理图片坏链具体实现步骤
May 02 Javascript
JavaScript获取/更改文本框的值的实例代码
Aug 02 Javascript
初识Node.js
Mar 20 Javascript
jQuery改变form表单的action,并进行提交的实现代码
May 25 Javascript
jQuery EasyUI 入门必看
Jun 03 Javascript
Node.js如何自动审核团队的代码
Jul 20 Javascript
JQuery实现table中tr上移下移的示例(超简单)
Jan 08 jQuery
详解如何解决vue开发请求数据跨域的问题(基于浏览器的配置解决)
Nov 12 Javascript
node.js实现为PDF添加水印的示例代码
Dec 05 Javascript
java实现单链表增删改查的实例代码详解
Aug 30 Javascript
layui table单元格事件修改值的方法
Sep 24 Javascript
一起来看看Vue的核心原理剖析
Mar 24 Vue.js
详解如何用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中使用Oracle数据库(5)
2006/10/09 PHP
php 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
php eval函数用法总结
2012/10/31 PHP
php生成随机数的三种方法
2014/09/10 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
js自带函数备忘 数组
2006/12/29 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
2014/03/18 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
JS+CSS实现可拖拽的漂亮圆角特效弹出层完整实例
2015/02/13 Javascript
一个php+js实时显示时间问题
2015/10/12 Javascript
JavaScript实现刷新不重记的倒计时
2016/08/10 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
layui分页效果实现代码
2017/05/19 Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
2017/11/22 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
laydate只显示时分 不显示秒的功能实现方法
2019/09/28 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
Python装饰器使用示例及实际应用例子
2015/03/06 Python
python中使用序列的方法
2015/08/03 Python
Python模块搜索路径代码详解
2018/01/29 Python
python操作excel的方法(xlsxwriter包的使用)
2018/06/11 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
python 实现仿微信聊天时间格式化显示的代码
2020/04/17 Python
Skyscanner台湾:全球知名的旅行比价引擎
2018/07/01 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
意大利奢侈品购物网站:Deliberti
2019/10/08 全球购物
俄罗斯在线水暖商店:Perfecto.ru
2019/10/25 全球购物
遗嘱继承公证书
2014/04/09 职场文书
品牌转让协议书
2014/08/20 职场文书
办护照工作证明
2014/10/01 职场文书
行政文员岗位职责
2015/02/04 职场文书
街道社区活动报告
2015/02/05 职场文书