我正在尝试将图像编码为base64并将其发送到服务器。当我检索图像时,它显示的全部都是空白的。
我用来编码的代码就是:
encodeImageUri = function(imageUri) {
var c = document.createElement('canvas');
var ctx = c.getContext("2d");
var img = new Image();
img.onload = function() {
c.width = this.width;
c.height = this.height;
ctx.drawImage(img, 0, 0);
};
img.src = imageUri;
var dataURL = c.toDataURL("image/jpeg");
return dataURL.slice(22, dataURL.length);
}
取自:Using PhoneGap, How to get base64 image data of the photo chosen from photo library in iPhone
答案 0 :(得分:3)
我使用以下代码将图像转换为Base64:
var Base64 = {
/**
* This implementation relies on Cordova 1.5 or above implementations.
*/
getBase64ImageFromInput : function (input, callback) {
var imageReader = new FileReader();
imageReader.onloadend = function (evt) {
if (callback)
callback(evt.target.result);
};
//Start the asynchronous data read.
imageReader.readAsDataURL(input);
},
formatImageSrcString : function (base64) {
return (base64.match(/(base64)/))? base64 : "data:image/jpeg;base64," + base64;
}
};
下面是使用此对象将图像从文件输入转换为base64编码的示例:
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.onchange = function () {
var input = this.files[0];
if (input) {
Base64.getBase64ImageFromInput(input, function (imageData) {
//Process the image string.
console.log(imageData);
});
} else {
alert("Please select an image.");
}
};
希望这会有所帮助。如果您有任何问题,请告诉我。
答案 1 :(得分:2)
图片正在异步加载 ,这意味着您的return dataURL...
在将图片加载到画布之前发生了。
不要让这个函数返回一个值,而是让它调用一个回调函数。
encodeImageUri = function(imageUri, callback) {
var c = document.createElement('canvas');
var ctx = c.getContext("2d");
var img = new Image();
img.onload = function() {
c.width = this.width;
c.height = this.height;
ctx.drawImage(img, 0, 0);
if(typeof callback === 'function'){
var dataURL = c.toDataURL("image/jpeg");
callback(dataURL.slice(22, dataURL.length));
}
};
img.src = imageUri;
}
您现在称之为:
encodeImageUri('/path/to/image.png', function(base64){
// Do something with the b64'd image
});
注意:要使其生效,图片需要与您的页面位于同一个域中。
答案 2 :(得分:2)
使用readAsDataURL的FileReader方法。