如何在javascript中base64编码图像

fab*_*ian 6 javascript base64 android image cordova

我正在开发一个phonegap应用程序并使用该navigator.getPicture方法来获取图像.

我得到这张照片的方式是:

navigator.camera.getPicture(onSuccess, onFail, { quality: 50, 
destinationType: Camera.DestinationType.FILE_URI });

function onSuccess(imageURI) {
    var image = document.getElementById('myImage');
    image.src = imageURI;
}
Run Code Online (Sandbox Code Playgroud)

就像phonegap doc中的例子一样.

我希望能够使用imageURI,然后将其转换为图像数据,以便以后上传.(我不想使用phonegap的FileTransfer)

到目前为止,我已尝试用JavaScript获取图像数据?并且你怎么能编码在JavaScript字符串为Base64?

当我尝试以下,

function onSuccess(imageURI) {
    getBase64Image(imageURI);
}

function getBase64Image(img) {
    // Create an empty canvas element
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    // Copy the image contents to the canvas
    var ctx = canvas.getContext("2d");
   ctx.drawImage(img, 0, 0);

   // Get the data-URL formatted image
   // Firefox supports PNG and JPEG. You could check img.src to
   // guess the original format, but be aware the using "image/jpg"
   // will re-encode the image.
   var dataURL = canvas.toDataURL("image/png");

   console.log(dataURL); //here is where I get 'data:,'       

   return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}
Run Code Online (Sandbox Code Playgroud)

dataURL在返回前打印.我只是得到data:,内容.

关于我做错了什么的任何想法?

Sim*_*ald 0

那么你可以尝试将其作为 DATA_URL 获取。您的情况可能会有所不同,因为当图像转换为 Base64 字符串时,您可能会遇到内存不足错误。

navigator.camera.getPicture(onSuccess, onFail, { quality: 50, 
    destinationType: Camera.DestinationType.DATA_URL });

function onSuccess(imageURI) {
    var image = document.getElementById('myImage');
    image.src = imageURI;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用FileReader.readAsDataURL()

早期版本的 Android 未实现 canvas.toDataURL 方法。