zoukankan      html  css  js  c++  java
  • html导出图片

    有一个神奇的库:html2canvas。
    这个库简洁优美,使用方便。

    下面先看一个小demo,它需要用到一张图片:haha.jpg。

    <html>
    <head>
        <script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.min.js"></script>
    </head>
    <body>
    
    <div id="mydiv">
        <h1>天下大势,为我所控</h1>
        <img src="haha.jpg">
    </div>
    </body>
    <script>
        html2canvas(document.querySelector("#mydiv"), {
            onrendered: function (canvas) {
                document.body.appendChild(canvas)
            }
        })
    </script>
    </html>
    

    html转成图片这个功能并不是一种规范,那么html2canvas这个库是如何做到“截图”的呢?
    实际上,html2canvas并没有截图,它是通过DOM读取元素的属性、样式等所有信息,以此为基础自己画出来的。
    明白了原理,也就很容易想到html2canvas无法截图视频,也无法截图SWF等内容。JS所能获取的全部信息就是html2canvas所能获取到的全部信息。

    html2canvas并非能获取任意元素的截图,它具有以下局限:

    • 不支持iframe
    • 不支持跨域图片
    • 不能在浏览器插件中使用
    • 部分浏览器上不支持SVG图片
    • 不支持Flash
    • 不支持古代浏览器和IE

    如果想把canvas导出为图片,可以使用另外一个库:canvas2image

    更多信息,参考官方文档:html2canvas

    还有另外一种将HTML页面内容导出为图片的方式,这种方式利用了img元素的src属性,src属性可以是base64编码的字符串,也可以是SVG格式的字符串。

    <!DOCTYPE html>
    <html>
    <body><h2>Input Div:</h2>
    <div id="div">
        <p>Just have a <span style='color:white; text-shadow:0 0 2px blue;'>
            TRY</span></p>
        <p><b>By Dion</b></p> 
    </div>
    <h2>Output Image:</h2>
    <script>
        var divContent = document.getElementById("div").innerHTML;
        var data = "data:image/svg+xml," +
            "<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'>"
            + "<foreignObject width='100%' height='100%'>" +
            "<div xmlns='http://www.w3.org/1999/xhtml' " +
            "style='font-size:16px;font-family:Helvetica'>"
            + divContent +
            "</div>" +
            "</foreignObject>" +
            "</svg>";
        var img = new Image();
        img.src = data;
        document.getElementsByTagName('body')[0].appendChild(img);</script>
    </body>
    </html>
    
  • 相关阅读:
    几道cf水题
    cf水题
    一道cf水题
    c++list用法
    c++map用法
    c++ vector常见用法
    c++string,常见用法总结
    复变函数考试后的反思
    [FZYZOJ 1204] 零和问题
    [FZYZOJ 1202] 金坷垃
  • 原文地址:https://www.cnblogs.com/weiyinfu/p/7868717.html
Copyright © 2011-2022 走看看