Web开发之html2canvas 实现纯JS网页截图简单例子

       代码库地址: https://github.com/niklasvh/html2canvas

       自己修改其中的 test.js (主要是其中的一些库的路径) 把test.js external文件夹 src文件夹 放在同一目录下

  var h2cSelector, h2cOptions;
  (function(document, window) {
      var scrStart = '<script type="text/javascript" src="', scrEnd = '"></script>';
      document.write(scrStart + 'external/jquery-1.6.2.js' + scrEnd);
      var html2canvas = ['Core', 'Generate', 'Parse', 'Preload', 'Queue', 'Renderer', 'Util', 'renderers/Canvas',  'plugins/jquery.plugin.html2canvas'], i;
      for (i = 0; i < html2canvas.length; ++i) {
          document.write(scrStart + 'src/' + html2canvas[i] + '.js' + scrEnd);
      }
      window.onload = function() {
         h2cSelector = [document.body];

         if (window.setUp) {
             window.setUp();
         }


     };
 }(document, window));

 function screenShot()
 {
     setTimeout(function() {
             $(h2cSelector).html2canvas($.extend({
                 flashcanvas: "external/flashcanvas.min.js",
                 logging: true,
                 profile: true,
                 useCORS: true,
                 onrendered:function(canvas )
                 {
                     var screenshot;
                     screenshot = canvas.toDataURL( "image/png" );
                     console.info(screenshot);
                 }
             }, h2cOptions));
         }, 100);
 }

       在主页中包含 test.js 然后调用 screenshot 函数就可以在控制台看到图片了,该数据可以上传至服务器。

===========================================================================

       使用JavaScript截图,这里我要推荐两款开源组件:一个是Canvas2Image,它可以将Canvas绘图编程PNG/JPEG/BMP的图像;但是光有它还不够,我们需要给任意DOM(至少是绝大部分)截图,这就需要html2canvas,它可以将DOM对象转换成一个canvas对象。两者的功能结合起来,就可以把页面上的DOM截图成PNG或者JPEG图像了,很酷。

Canvas2Image

       它的原理是利用了HTML5的canvas对象提供了toDataURL()的API:

var strDataURI = oCanvas.toDataURL(); 

// returns "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAYAAACt..."

       这样的结果是base64编码的(事实上,image也可以通过这种方式以字符串的形式写死到页面上),所以我们还需要一个base64编解码的lib。

       但是目前的缺陷也有不少,比如目前Opera和Safari只支持PNG,FireFox的支持性则好得多。

       生成图片有两种方式写入页面,一种是生成一个图片对象写入页面DOM树中,这也是支持性比较好的方式:

// returns an <img> element containing the converted PNG image 

var oImgPNG = Canvas2Image.saveAsPNG(oCanvas, true);

       但是如果你做一个JavaScript截图功能的话,你可能希望截图后能够自动打开保存文件的“保存”对话框:

Canvas2Image.saveAsPNG(oCanvas);

// will prompt the user to save the image as PNG.

       这个方式调用会生成一个mimeType“image/octet-stream”的数据流到浏览器,但是“保存”对话框无法识别出图片适当的后缀名,默认保存的文件在FireFox下是“xxx.part”这种名字,这是令人遗憾的地方,但是似乎没有什么好办法解决。

html2canvas

       它作用于DOM加载的过程,收集其中的信息,再来绘制canvas图像,也就是说,其实它并不是将展现的DOM树截成canvas图,而是仿照DOM树重新绘制了一张canvas图。于是很多CSS样式都无法被准确识别出来,无法准确反映到图上。

       其它的限制还有不少,比如:

       javascript必须是同域的,对于跨域的情况需要使用代理服务器(API中有参数可以指定),对于image也同样;

       frame内的DOM树无法被准确绘制;

       因为要绘制的是canvas图,所以像IE8这样的浏览器需要使用FlashCanvas这样的第三方库。
这个页面可以测试各个网站使用它来截图的效果,效果相当不错:

用JavaScript截图

       API使用的例子:

html2canvas(

    [dom1, dom2],

    {

        logging: false,

        useCORS: false,

        proxy:   false,

        onrendered: function(canvas){

            // canvas 就是绘制的canvas是对象

        }

    }

);

       对于这一类相对小众的类库,文档都是很差的,包括API的定义,需要阅读源码,代码上写得挺清楚的。

       另外,该站点下载包里面还有一个JQuery的插件,对这个API做了一个封装,可以无视。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTML5 Canvas游戏开发实战》主要讲解使用HTML5 Canvas开发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏开发实例深入剖析了其内在原理,让读者不仅知其然,而且知其所以然。在本书中,除了介绍了HTML5 Canvas的基础API之外,还重点阐述了如何在JavaScript中运用面向对象的编程思想来进行游戏开发。   《HTML5 Canvas游戏开发实战》在介绍每个游戏开发的过程时,都会包括游戏分析、开发过程、代码解析和小结等相关内容,以帮助读者了解每种类型游戏开发的详细步骤,让读者彻底掌握各种类型游戏的开发思想。最后,还通过数据对比分析,指导读者提升程序的性能,写出高效的代码,从而开发出运行流畅的游戏。   《HTML5 Canvas游戏发实战》主要讲解使用HTML5 Canvas来发和设计各类常见游戏的思路和技巧,在介绍HTML5 Canvas相关特性的同时,还通过游戏发实例深剖析了其内在原理,让读者不仅知其然,而且知其所以然。在本书中,除了介绍了HTML5 Canvas的基础API之外,还重阐述了如何在JavaScript中运用面向对象的编程思想来行游戏发。   《HTML5 Canvas游戏发实战》在介绍每个游戏发的过程时,都会包括游戏分析、发过程、代码解析和小结等相关内容,以帮助读者了解每种类型游戏发的详细步骤,让读者彻底掌握各种类型游戏的发思想。最后,还通过数据对比分析,指导读者提升程序的性能,写出高效的代码,从而发出运行流畅的游戏。 【推荐语】   系统讲解HTML 5 Canvas的基础知识和高级技巧,深剖析源库件lufylegend的原理与使用   以实例为向导,详细讲解射游戏、物理游戏、网络游戏、页面游戏等各类游戏的发思路和技巧 【作者】   张路斌,资深前端发工程师和游戏发工程师,从事Web发和游戏发多年,精通HTML5和Flash等技术。HTML5源游戏引擎lufylegend.js的发者,利用HTML5和Flash等技术独立发了大型网页游戏、Flash、多平台游戏三国记系列,以及数十款手机小游戏,游戏发经验十分丰富。 前言 为什么要写这本书 读者对象 如何阅读本书 勘误和支持 致谢 第一部分 准备工作篇 第1章 准备工作 第二部分 基础知识篇 第2章 Canvas基本功能 第3章 Canvas高级功能 第4章 lufylegend开源库件 第三部分 开发实战篇 第5章 从简单做起—“石头剪子布”游戏 第6章 开发“俄罗斯方块”游戏 第7章 开发“是男人就下一百层”游戏 第8章 开发射击类游戏 第9章 开发物理游戏 第10章 开发网络游戏 第四部分 技能提高篇 第11章 提高效率的分析 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值