使用到的項目:html2canvas
github: https://github.com/niklasvh/html2canvas/
官網:http://html2canvas.hertzen.com/
思路過程或步驟:
1、将網頁生成Base64圖檔資料;
2、将Base64圖檔資料生成Blob資料對象;
3、使用a标簽的download屬性對圖檔進行下載下傳;
4、解決一些浏覽器相容問題。
第一步:生成Base64圖檔資料,需要引用html2canvas.js
html2canvas(document.body, { allowTaint: true, taintTest: false, onrendered: function (canvas) { canvas.id = "mycanvas"; //生成base64圖檔資料 var base = canvas.toDataURL("image/png"); var dataUrl = canvas.toDataURL(); downloadFile(dataUrl, "orderinfo.png"); } });
第二步:生成Blob資料對象
var base64ToBlob = function (code) { var parts = code.split(\';base64,\'); var contentType = parts[0].split(\':\')[1]; var raw = window.atob(parts[1]); var rawLength = raw.length; var uInt8Array = new Uint8Array(rawLength); for (var i = 0; i < rawLength; ++i) { uInt8Array[i] = raw.charCodeAt(i); } return new Blob([uInt8Array], {type: contentType}); };
第三步:使用a标簽的download屬性下載下傳圖檔
function downloadFile(content,fileName){ var aLink=document.createElement(\'a\'); var evt=document.createEvent("HTMLEvents"); evt.initEvent("click",true,true); aLink.download=fileName; aLink.href=URL.createObjectURL(blob); aLink.click(); }
第四步:解決一些浏覽器相容問題
IE浏覽器下,隻支援IE10及以上:
火狐浏覽器,我的版本是66,看網上的部落格是61以上,沒有測試過:if(window.navigator.msSaveOrOpenBlob){ var bstr=atob(content.split(\',\')[1]); var n = bstr.length; var u8arr = new Uint8Array(n); while (n--) { u8arr[n] = bstr.charCodeAt(n) } var blob = new Blob([u8arr]); window.navigator.msSaveOrOpenBlob(blob, \'xxx\' + \'.\' + \'png\') }
還有其他的浏覽器類型沒有測試過。var aLink=document.createElement(\'a\'); var evt=document.createEvent("HTMLEvents"); evt.initEvent("click",true,true); aLink.download=fileName; aLink.href=URL.createObjectURL(blob); // aLink.click(); aLink.dispatchEvent(new MouseEvent(\'click\', {bubbles: true, cancelable: true, view: window}));
完整代碼:
<!DOCTYPE html>
<html>
<head>
<meta name="layout" content="main">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript" src="html2canvas.js"></script>
<script type="text/javascript" >
$(document).ready( function(){
$(".example1").on("click", function(event) {
event.preventDefault();
html2canvas(document.body, {
allowTaint: true,
taintTest: false,
onrendered: function(canvas) {
canvas.id = "mycanvas";
//生成base64圖檔資料
var base= canvas.toDataURL("image/png");
var dataUrl = canvas.toDataURL();
var newImg = document.createElement("img");
newImg.src = dataUrl;
downloadFile(dataUrl,"xxx.png");
$("#createimage").attr("src",dataUrl);
}
});
});
});
function downloadFile(content,fileName){
var base64ToBlob=function(code){
if(navigator.appName == "Microsoft Internet Explorer"&&parseInt(navigator.appVersion.split(";")[1].replace(/[ ]/g, "").replace("MSIE",""))<=9){
alert("您的浏覽器版本過低,請下載下傳IE10及以上版本");
}else{
var parts=code.split(\';base64,\');
var contentType=parts[0].split(\':\')[1];
var raw=window.atob(parts[1]);
var rawLength=raw.length;
var uInt8Array=new Uint8Array(rawLength);
for(var i=0;i<rawLength;++i){
uInt8Array[i]=raw.charCodeAt(i);
}
return new Blob([uInt8Array],{type:contentType});
}
};
var blob=base64ToBlob(content);
if(window.navigator.msSaveOrOpenBlob){
var bstr=atob(content.split(\',\')[1]);
var n = bstr.length;
var u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n)
}
var blob = new Blob([u8arr]);
window.navigator.msSaveOrOpenBlob(blob, \'xxx\' + \'.\' + \'png\')
}else{
var aLink=document.createElement(\'a\');
var evt=document.createEvent("HTMLEvents");
evt.initEvent("click",true,true);
aLink.download=fileName;
aLink.href=URL.createObjectURL(blob);
// aLink.click();
//相容火狐浏覽器
aLink.dispatchEvent(new MouseEvent(\'click\', {bubbles: true, cancelable: true, view: window}));
}
};
</script>
</head>
<body>
Hello!
<div class="" style="background-color: #abc;">
html5頁面截圖
</div>
<textArea id="textArea" col="20" rows="10" ></textArea>
<input class="example1" type="button" value="截圖">
生成界面如下:
<img src="" id="createimage"/>
</body>
</html>
小結:有什麼遺漏、錯誤請留言。
參考部落格連結:
html5 實作網頁截屏 頁面生成圖檔(圖文)
純前端實作base64圖檔下載下傳,相容IE10+
原生JS實作base64圖檔下載下傳-圖檔儲存到本地
前端實作圖檔下載下傳
js下載下傳base64格式的圖檔(相容火狐)