2014-05-06 68 views
0

我正在編寫代碼以將映像轉換爲Base64,以將映像存儲在localStorage中以供離線使用。但是每次我收到像「data:」這樣的回覆。圖像src很好,因爲變量div會顯示圖像。有人可以幫我解決這個錯誤嗎?將映像轉換爲Base64時出錯

代碼:

var div = $('<img />').appendTo('body'); 
div.attr('src', "src/1.png"); 
div.attr('class', 'test'); 

var img = new Image; 
img.src = "src/1.png"; 

var lol = getBase64Image(img); 
console.log(lol); 

功能:

function getBase64Image(img) { 

var canvas = document.createElement("canvas"); 
canvas.width = img.width; 
canvas.height = img.height; 

var ctx = canvas.getContext("2d"); 
ctx.drawImage(img, 0, 0); 

var dataURL = canvas.toDataURL("image/png"); 
console.log("lol "+dataURL); 

return dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); 
} 
+0

已對圖像加載完畢?也許更改'var lol = getBase64Image(img);'到'img.addEventListener('load',function(){getBase64Image(this)},false);' – PhistucK

回答

0

最大的可能是你試圖訪問尚未加載的圖像。對我很好了以下工作:

var img = new Image(); 
img.onload = function() { 
    // when image is loaded... 
    console.log(getBase64Image(img)); 
}; 

img.src = '/image/in/current/domain.jpg'; 

DEMO:http://jsfiddle.net/ZRPs9/1/

+0

謝謝,但現在我遇到了問題:Uncaught SecurityError:未能'HTMLCanvasElement'上執行'toDataURL':受污染的畫布可能無法導出。我開始認爲最好的選擇是將圖像以Base64格式保存爲JSON。 – Amsik

+0

@Amsik最好的選擇將永遠是服務器端的方式。 – VisioN