Quantcast
Channel: 黑暗執行緒
Viewing all articles
Browse latest Browse all 2311

透過JavaScript將HTML轉為圖檔

$
0
0

最近寫了小工具用ASP.NET MVC及Knockout讀取跑道計圈GPS資料轉成HTML表格,當成運動記錄的圖檔附件,但每次產生HTML表格後都得用螢幕擷取工具將網頁畫面另存圖檔,雖然手續還算單純,但你知道,懶惰是沒有極限的,我開始動腦筋,打算將產生圖檔的動作也自動化。

薑薑薑薑~ 如上圖所示,真的被我找到方法! 一切要感謝神奇的程式庫—html2canvas,它可以將整張網頁或局部元素轉為HTML5 Canvas,一旦轉成Canvas,匯出圖檔便是小事一椿囉!

html2canvas的原理並非擷取網頁畫素,而是解析DOM及CSS的所有細節,在HTML5 Canvas裡以線、矩形、圓弧、文字... 等試著模擬出相同外觀,因此產出結果可能有細微誤差,也存在無法讀取跨網域內容的限制,但經實際使用,效果已讓人滿意,html2canvas幾乎是用Canvas打造出靜態網頁瀏覽器引擎,是神人級的作品。(咦? 我怎麼跪著寫範例程式... )

範例程式碼如下,有興趣的朋友也可試玩看看:

<!DOCTYPEhtml>
<html>
<head>
<metacharset="utf-8">
<title>HTML to Image</title>
<style>
    table { background-color: #ccddff; }
    td { padding: 2px 6px; }
    table input { 
      width: 100px; padding: 2px 6px; 
      color: blue; border: 1px solid gray; 
    }
    fieldset { width: 200px; height: 120px; margin-top: 6px; }
</style>
</head>
<body>
<table>
<tr><td>姓名</td><td><inputvalue="Darkthread"></td></tr>
<tr><td>積分</td><td><inputvalue="9999"></td></tr>
</table>
<hr/>
<inputtype="button"value="轉為圖檔"/>
<a></a>
<fieldset>
<legend>圖檔</legend>
<div>
</div>
</fieldset>
<scriptsrc="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.js "></script>
<script src="http://ajax.aspnetcdn.com/ajax/knockout/knockout-3.0.0.js "></script>
<script src="http://html2canvas.hertzen.com/build/html2canvas.js"></script>
<script>
    $(":button").click(function() {
      html2canvas($("table")[0], {
        onrendered: function(canvas) {
var $div = $("fieldset div");
          $div.empty();
          $("<img />", { src: canvas.toDataURL("image/png") }).appendTo($div);
        }
      });
    });
</script>
</body>
</html>

Viewing all articles
Browse latest Browse all 2311

Trending Articles