1. 程式人生 > >【html2canvas】html2canvas生成海報

【html2canvas】html2canvas生成海報

html2canvas生成海報

html2canvas 能夠實現在使用者瀏覽器端直接對整個或部分頁面進行截圖。這個html2canvas指令碼將當頁面渲染成一個Canvas圖片,通過讀取DOM並將不同的樣式應用到這些元素上實現。

它不需要來自伺服器任何渲染,整張圖片都是在客戶端瀏覽器建立。當瀏覽器不支援Canvas時,將採用Flashcanvas或ExplorerCanvas技術代替實現。以下瀏覽器能夠很好的支援該指令碼:Firefox 3.5+, Google Chrome, Opera新的版本, IE9以上的瀏覽器。

html2canvas可以通過獲取HTML的某個元素,然後生成Canvas,能讓使用者儲存為圖片。

基本語法

html2canvas(element, options);
html2canvas(document.body, {
  onrendered: function(canvas) {
    var url = canvas.toDataURL();//圖片地址
    document.body.appendChild(canvas);
  },
  width: 300,
  height: 300
});

或者使用ES6的promise

//兩個引數:所需要截圖的元素id,截圖後要執行的函式, canvas為截圖後返回的最後一個canvas
 html2canvas(document.getElementById('id')).then(function(canvas) {document.body.appendChild(canvas);});

可用引數

引數名稱 型別 預設值 描述
allowTaint boolean false Whether to allow cross-origin images to taint the canvas—允許跨域
background string #fff Canvas background color, if none is specified in DOM. Set undefined for transparent—canvas的背景顏色,如果沒有設定預設透明
height number null Define the heigt of the canvas in pixels. If null, renders with full height of the window.—canvas高度設定
letterRendering boolean false Whether to render each letter seperately. Necessary if letter-spacing is used.—在設定了字間距的時候有用
logging boolean false Whether to log events in the console.—在console.log()中輸出資訊
proxy string undefined Url to the proxy which is to be used for loading cross-origin images. If left empty, cross-origin images won’t be loaded.—代理地址
taintTest boolean true Whether to test each image if it taints the canvas before drawing them—是否在渲染前測試圖片
timeout number 0 Timeout for loading images, in milliseconds. Setting it to 0 will result in no timeout.—圖片載入延遲,預設延遲為0,單位毫秒
width number null Define the width of the canvas in pixels. If null, renders with full width of the window.—canvas寬度
useCORS boolean false Whether to attempt to load cross-origin images as CORS served, before reverting back to proxy–這個我也不知道是幹嘛的

html2canvas官網下載js:
http://html2canvas.hertzen.com/?utm_source=caibaojian.com

jQuery下載:
http://jquery.com/download/

jQuery的API使用文件:
http://jquery.cuishifeng.cn/


以下是自己的程式碼:

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1,user-scalable=no">
	<meta name="apple-mobile-web-app-capable" content="yes">
	<meta name="apple-mobile-web-app-status-bar-style" content="black">
	<title>html2canvas生成海報</title>
	<script type="text/javascript" src="js/jquery.js"></script>
	<script type="text/javascript" src="js/html2canvas.js"></script>
</head>
<body>
	<div>
		<input type="button" value="截圖" onclick="takeScreenshot()">
		<input type="button" value="儲存圖片" onclick="save()">
	</div>
	<div id="view" style="width: 100%; background:#eee;padding: 20px;margin: 10px 0">
		<p>圖片不見了</p>
		<img class="bg"style="height: 300px;width: 100%" src="http://img.aworld.cn/o_1csndcipj18p61e8sgtg19l31bgfl.jpg" alt="圖片不見了">
	    <h4 style="color: #000; ">Hello world!</h4>
	</div>

<script type="text/javascript">
	function takeScreenshot() {
		//兩個引數:所需要截圖的元素id,截圖後要執行的函式, canvas為截圖後返回的最後一個canvas
		html2canvas(document.getElementById('view'), {
			useCORS: true
		}).then(function(canvas) {
			document.body.appendChild(canvas);
			$(document).find('canvas').attr('id', 'mycanvas');
		});
	}
	function save() {
		var canvas = document.getElementById("mycanvas"); //獲取canvas
		var data = canvas.toDataURL('image/png');
		console.log(data)

	}
</script>
</body>

</html>

程式碼實現如下圖:

在這裡插入圖片描述


html2canvas的使用,可詳細檢視引數