1. 程式人生 > >html導出圖片

html導出圖片

width 更多 不支持 樣式 bject con 利用 mage 如果

有一個神奇的庫: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>

html導出圖片