2014-05-22 128 views
0

我尝试使用此代码将图像二进制转换为base64,但仍不成功。Base64 - 无效编码

我得到了无效的base64字符串。使用此工具验证。

http://www.freeformatter.com/base64-encoder.html

var img = document.getElementById('image'); 

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"); 
return dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); 
} 

这些解决方案没有帮助我的人。我希望能很快得到答案。

结果 iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAADKUlEQVR4Ae3QMQEAAADCoPVPbQhfiEBhwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYM GDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBgwIABAwYMGDBg4B0Yv9QAAQ + mdHoAAAAASUVORK5CYII =

感谢。

+0

什么是“不成功” - 它是错误的,给一个无效的base64字符串,或其他? –

+0

无效的base64字符串。 –

+0

我不认为你可以删除数据:图像部分。尝试在替换之前返回dataURL。 –

回答

0

我得到了答案。

var img = document.getElementById('image'); 

var oReq = new XMLHttpRequest(); 
oReq.open("GET", img, true); 
oReq.responseType = "arraybuffer"; 

oReq.onload = function (oEvent) { 
    var arrayBuffer = oReq.response; // Note: not oReq.responseText 
    if (arrayBuffer) { 
     var x = img.split('.'); 
     var ext = x[x.length - 1]; 
     var b64img = _arrayBufferToBase64(arrayBuffer); 
     $('<img />').attr('src', 'data:image/' + ext + ';base64,' + b64img).appendTo($('body')); 
    } 
}; 

oReq.send(null); 

function _arrayBufferToBase64(buffer) { 
    var binary = '' 
    var bytes = new Uint8Array(buffer) 
    var len = bytes.byteLength; 
    for (var i = 0; i < len; i++) { 
     binary += String.fromCharCode(bytes[i]) 
    } 
    return window.btoa(binary); 
}