使用canvas截圖網頁爲圖片並解決跨域空白以及模糊問題

前幾天給了個需求對瀏覽器網頁進行截圖,把網頁統計數據圖形表等截圖保存至用戶本地。javascript

首先對於網頁截圖,我用的是canvas實現,獲取你須要截圖的模塊的div,從而使用canvas對你須要的模塊進行截圖。html

咱們先來引入canvas的js文件,js文件獲取地址官網主頁:http://html2canvas.hertzen.com/java

<script type="text/javascript" src="js/html2canvas.js"></script>
<script type="text/javascript" src="js/html2canvas.min.js"></script>

div按鈕代碼canvas

<div><a id="down" href="" download="downImg">下載按鈕</a></div>
//href用來取到值 要寫個空   down load是下載圖片出來的名稱

jsp代碼api

 
 
function test() {
     var canvas2 = document.createElement("canvas");
    //建立一個新的canvas let _canvas = document.querySelector('#dijit__TemplatedMixin_0');     
     //這裏面填寫 你須要截圖的div var w = parseInt(window.getComputedStyle(_canvas).width);   var h = parseInt(window.getComputedStyle(_canvas).height); canvas2.width = w * 2; canvas2.height = h * 2;            
     //將canvas畫布放大2倍或者更多,而後盛放在較小的容器內,就顯得不模糊了 canvas2.style.width = w + "px"; canvas2.style.height = h + "px"; var context = canvas2.getContext("2d"); context.scale(2, 2);  //指圖片偏移 html2canvas(document.querySelector('#dijit__TemplatedMixin_0'), { //寫須要截圖的div taintTest : false, useCORS : true, allowTaint :false,   //這三串代碼解決跨域問題
    canvas : canvas2 }).then(function(canvas) {  document.querySelector("#down").setAttribute('href',canvas.toDataURL());   
            //down設置爲你的點擊鍵 單機下載 });
window.onload = test;  
 

記得div要選對,否則會出現下載出來htm文件和txt文件。跨域

截圖出來後,因爲個人網址上有百度地圖的api,地圖圖片等等一些東西,用canvas網頁進行截圖是就會發現全部圖片的地方都是空白。這就是由於跨域。瀏覽器

來說一下跨域問題,我舉個例子說明這個跨域,好比個人網頁裏面有的圖片不是來自於本身的服務器。那麼,這張圖片就和這個網頁不是同域,那麼html2canvas就沒法對這種圖片進行截圖,若是你的網站的全部圖片都放在單獨的圖片服務器上,那麼用html2canvas對整個網頁進行截圖是就會發現全部圖片的地方都是空白。服務器

跨域問題網上好多大佬說用代理服務器來解決,可是感受太麻煩,後來我使用了小段代碼就OK了。jsp

taintTest : false,     
useCORS : true,            
allowTaint :false, 
//注:useCORS:true和allowTaint:true 這兩個都是來解決跨域問題的,可是並不能夠一塊兒使用,若是同時使用會出現錯誤。

對於截圖模糊就調整canvas畫布大小好比我上面寫的*2,畫布調大,容器小,截圖天然就清楚了網站

截圖成功呈現

 
 
   未經本人贊成,請勿轉載!
相關文章
相關標籤/搜索