2013-05-07 17 views
5

Kullanıcının document.body görüntüsünü oluşturan bir screengrab düğmesi oluşturmaya çalışıyorum.html2canvas tarayıcıda açmadan bir jpeg olarak kaydetme

İdeal olarak, kullanıcının görüntüyü yerel olarak .jpeg olarak kaydetme seçeneği vardır.

html2canvas kütüphanesini kullanarak ihtiyacım olan işlevselliği yaratmaya yaklaşıyorum.

function screenGrabber() { 
    html2canvas([document.body], { 
    logging: true, 
    useCORS: true, 
    onrendered: function (canvas) {    

     img = canvas.toDataURL("image/jpg"); 

     console.log(img.length); 
     console.log(img); 

     window.location.href=img; // it will save locally 
    } 
}); 

} 

bu yeni bir tarayıcı penceresinde img değişken açılış oldum çalışan olduğunu doğrulamak için. Görüntü tamamen oluşmuyor ve sanırım bu, uzunluğu 30.000 karakterden fazla olduğu için.

Kullanıcıya tuvali onrendered olayından sonra yerel olarak kaydetme seçeneği nasıl daha iyi verebilirim?

cevap

4

bir indirme işlevi çok daha kolay hale getirir:

function download(strData, strFileName, strMimeType) { 
    var D = document, 
     A = arguments, 
     a = D.createElement("a"), 
     d = A[0], 
     n = A[1], 
     t = A[2] || "text/plain"; 

    //build download link: 
    a.href = "data:" + strMimeType + "," + escape(strData); 


    if (window.MSBlobBuilder) { 
     var bb = new MSBlobBuilder(); 
     bb.append(strData); 
     return navigator.msSaveBlob(bb, strFileName); 
    } /* end if(window.MSBlobBuilder) */ 



    if ('download' in a) { 
     a.setAttribute("download", n); 
     a.innerHTML = "downloading..."; 
     D.body.appendChild(a); 
     setTimeout(function() { 
      var e = D.createEvent("MouseEvents"); 
      e.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
      a.dispatchEvent(e); 
      D.body.removeChild(a); 
     }, 66); 
     return true; 
    } /* end if('download' in a) */ 
    ; //end if a[download]? 

    //do iframe dataURL download: 
    var f = D.createElement("iframe"); 
    D.body.appendChild(f); 
    f.src = "data:" + (A[2] ? A[2] : "application/octet-stream") + (window.btoa ? ";base64" : "") + "," + (window.btoa ? window.btoa : escape)(strData); 
    setTimeout(function() { 
     D.body.removeChild(f); 
    }, 333); 
    return true; 
} /* end download() */ 





function screenGrabber() { 
    html2canvas([document.body], { 
    logging: true, 
    useCORS: true, 
    onrendered: function (canvas) {    

     img = canvas.toDataURL("image/jpeg"); 

     download(img, "modified.jpg", "image/jpeg"); 
    } 
}); 

} 
+1

Hey Dandavis. Bu örnekten jsfiddle gönderebilir misiniz? – Fizzix

+0

İyi bir örnek, test edilmemesine rağmen, teorik olarak oldukça işlevsel görünüyor. +1 –

+0

"MSBlobBuilder" 'ın sadece IE için uygun olduğunu varsayalım, bunun için herhangi bir çapraz platform yolu var mı? –

İlgili konular