浏览器窗口截屏功能的实现

        工作中遇到一个需求:在页面中设置一个提交页面反馈的按钮,用户点击该按钮时在弹出的dialog中可以填写反馈内容,填写完毕点击确定关闭弹窗时捕获当前浏览器窗口中的内容生成图片,用于记录页面中的当前状态,后台将用户填写的内容及生成的图片存入数据库供运维人员查看。经过查阅资料大概的思路分为一下几种:

        1、使用java中的Robot类,实现过程如下:               

  1.     Robot robot = new Robot();  
  2.     robot.delay(10000);  
  3.     Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());  
  4.     int width = (int) d.getWidth();  
  5.     int height = (int) d.getHeight();  
  6.     //最大化浏览器  
  7.     robot.keyRelease(KeyEvent.VK_F11);  
  8.     robot.delay(2000);  
  9.     Image image = robot.createScreenCapture(new Rectangle(0, 0, width,  
  10.             height));  
  11.     BufferedImage bi = new BufferedImage(width, height,  
  12.             BufferedImage.TYPE_INT_RGB);  
  13.     Graphics g = bi.createGraphics();  
  14.     g.drawImage(image, 0, 0, width, height, null);  
  15.     //保存图片  
  16.     ImageIO.write(bi, "jpg"new File("google.jpg"));  

                    该方式经测试后发现在java项目中可以实现当前桌面的截屏,但是用在Web项目中执行至robot.createScreenCapture处就会报错,貌似涉及到权限的问题,而且此方式截屏截到的是服务器端的桌面,毫无疑问被否决了...

          2、通过在java程序中通过调用脚本执行第三方的.exe截屏工具实现截图,此实现方式不但涉及并发的问题,而且exe文件在linux系统下能否正常被调用有待考证,所以pass。

          3、前两种方式偏向于从后台程序中生成图片的思路,所以更换思路从前台依靠js生成图片,查阅到的资料实现的方式包括dom-to-img、Html2Image、html2canvas等,经过测试前两者在生成图片时格式发生了明显的改变,显然不能满足要求,所以选择采用第三种方式。 html2canvas是一款前端插件,可以实现由dom元素到canvas元素的转换,官方项目github项目地址:点击打开链接

                该插件的使用方式较为简单,引入html2canvas.js文件即可使用,核心方法如下:

                html2canvas(domElement, {        
                                 option1: *,

                                 option2:*,

                                 ......

                                 onrendered: function(canvas){
                                        document.body.appendChild(canvas);
                                 },

                    });

                                 onrendered: function(canvas){
                                        document.body.appendChild(canvas);
                                 },

                    });

由于我的前端项目使用vue,所以在package.json文件中引入依赖,引入js文件时需注意:
             beta表示为稳定版,发布版,alpha表示测试版,尽量选择稳定版;
             然后在需要的页面引入html2canvas,即可使用,我项目中的调用如下:
html2canvas(document.body, {
      // allowTaint: true,
      taintTest: true,
      useCORS: true,
      async: false,
      // proxy: false,
      onrendered: function(canvas) {
            var data = canvas.toDataURL('image/png');
             ...
      }

    注意:

            a、此处生成的data是base64格式的字符串,传到后台需要进行对应的处理生成图片;
            b、如果截取的页面中存在跨域图片,需要在后台方法中设置相应的属性。我的项目基springcloud框架,只需添加 @CrossOrign注解即可。
            c、附可选的option参数列表:
NameTypeDefaultDescription
allowTaintbooleanfalse支持跨域
backgroundstring#fff背景色,默认透明
heightnumbernullcanvas高度
letterRenderingbooleanfalse字间距
loggingbooleanfalseconsole.log()输出信息
proxystringundefined加载跨域图片
taintTestbooleantrue是否在渲染前测试图片
timeoutnumber0图片加载延迟,默认延迟为0,单位毫秒
widthnumbernullcanvas宽度
useCORSbooleanfalse支持跨域

  注:allowTaint与useCORS都是与跨域相关的属性,但是不能同时设置为true,否则会报错;

              我查阅很多资料,都是使用allowTaint解决跨域问题的,但是我的项目中使用allowTaint会报禁止跨域请求的问题,使用useCORS可以解决,具体我也不知道什么原因,以后慢慢研究。

                        

新颖网络截屏插件是一款能够非常方便的将屏幕截屏图片发送到WEB服务器中的轻量级ActiveX控件,它可以非常方便的集成到您的博客,BBS,论坛,OA,或电子商务网站中,带给用户前所未有的用户体验。 同时新颖网络提供了ASP.NET(C#)和PHP的开发文档,和完善的ActiveX接口,您可以非常容易的使用和进行二次开发。最新版本的截屏控件极大的优化了图片数据传输的效率,可以帮助用户节省约40%的上传时间。 相信新颖网络WEB截屏控件能够帮助您赢得市场。 产品特点如下: 1. 基于标准HTTP协议。 2. 支持Jpg图片格式。 3. 一流的用户体验,操作方便。 4. 增加截屏图片编辑器。可任意输入文字,绘制矩形箭头等。 5. 免费提供JavaScript SDK包,方便您将插件快速集成到已有网站中。 支持语言:PHP,JSP,ASP,ASP.NET(C#),ASP.NET(VB),C++,VC,VC.NET,VB,VB.NET,C#,C#.NET,Delphi,C++Builder 支持平台:Visual Studio 6.0/2002/2003/2005/2008/2010,C++ Builder 6.0/2009/2010,Delphi 7/2009,Visual Basic 6.0/2008 支持脚本:JavaScript,VBScript 支持系统:Windows NT,Windows 2003,Windows XP,Windows Vista,Windows 7,Linux 支持图片格式:PNG 产品介绍:http://www.cnblogs.com/xproer/archive/2010/08/09/1796077.html 在线演示-标准版:http://www.ncmem.com/products/screencapture/demo/index.html 在线演示-专业版:http://www.ncmem.com/products/screencapture/demo2/index.html 在线演示-CKEditor3.6.1:http://www.ncmem.com/products/screencapture/demo-ckeditor361/index_ckeditor361.html 布署文档:http://www.cnblogs.com/xproer/archive/2011/09/14/2176188.html 升级日志:http://www.cnblogs.com/xproer/archive/2010/12/04/1896399.html 开发文档-ASP.NET(C#):http://www.cnblogs.com/xproer/archive/2010/12/04/1896552.html 开发文档-PHP:http://www.cnblogs.com/xproer/archive/2011/05/16/2047915.html 开发文档-JSP:http://www.cnblogs.com/xproer/archive/2011/05/20/2051862.html 示例下载-标准版:http://www.ncmem.com/download/ScreenCapture-demo.rar 示例下载-专业版:http://www.ncmem.com/download/ScreenCapturePro-demo.rar 文档下载:http://www.ncmem.com/download/ScreenCapture-doc.rar VC运行库:http://www.microsoft.com/downloads/details.aspx?FamilyID=9b2da534-3e03-4391-8a4d-074b9f2bc1bf 联系邮箱:1085617561@qq.com 联系QQ:1085617561
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值