我正在製作一個在HTML畫布上生成圖像的項目,然後提供將圖像作爲PNG下載。用斑點下載生成的畫布
該程序必須是客戶端(JavaScript)。
我可以用
var canvas=document.getElementById('canvas');
var img = canvas.toDataURL("image/png;base64");
這應該下載的圖片的代碼畫布轉換爲圖像:
var container = document.querySelector('#container2');
//container2 is a div in HTML
var output = container.querySelector('output');
//output is inside container2
window.URL = window.webkitURL || window.URL;
var prevLink = output.querySelector('a');
if (prevLink) {
window.URL.revokeObjectURL(prevLink.href);
output.innerHTML = '';}
//removes the download link if already there
var bb = new Blob([img], {data: "image/png;base64"});
//creates new blob from the img variable
var a = document.createElement('a');
a.download = 'test' + '.png';
//file name
a.href = window.URL.createObjectURL(bb);
//create URL from blob
a.textContent = 'Click here for download';
a.dataset.downloadurl = ["image/png;base64", a.download, a.href].join(':');
output.appendChild(a);
這工作完全如果blobvariable是文本字符串而不是「img」變量。而不是一個圖像,我得到一個損壞的.png文件,在記事本中打開給出data:image/png; base64,iVBORw0KGgoAAAANSUhEU ...(長64字母的字符串),這是正確的字符串,但不是很好爲PNG圖像。但如果我寫
document.write('<img src="'+img+'"/>');
圖像在新選項卡中正確打開。
我該如何讓下載的圖像完好無損?
(這似乎是不可能下載由Canvas2image產生的數據)
我嘗試使用.atob()將字符串解碼。下載它仍然給我一個腐敗的文件,但在記事本中打開它顯示出與工作PNG文件相似。我將原始圖像與解碼圖像的代碼進行了比較,似乎som部分丟失了(在Notepad ++中,它顯示爲[NUL],[STX] [FF]等。有什麼不對嗎? – user2262765 2013-04-29 17:24:10
是的,請閱讀我的編輯 – andrjas 2013-04-29 19:30:46