使用PhoneGap从imageURI获取Base64

SER*_*PRO 4 base64 android blackberry ios cordova

我正试图从我手机上的相册中选取的图像中获取base64,但我无法使其工作:

我试过这个:

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
    console.log("0");
    fileSystem.root.getFile(imageURI, null, function(fileEntry) {
        console.log("1");
        fileEntry.file(function(file) {
            console.log("2");
            var reader = new FileReader();
            reader.onloadend = function(evt) {
                console.log("Read complete!");
                image64.value = Base64.encode(evt.target.result);
            };
            reader.readAsText(file);
        }, failFile);
    }, failFile);
}, failSystem);
Run Code Online (Sandbox Code Playgroud)

虽然图像显示正确..我从此函数收到错误:

fileSystem.root.getFile(imageURI, null, function(fileEntry)
Run Code Online (Sandbox Code Playgroud)

错误是:FileError.ENCODING_ERR

我知道代码看起来不漂亮.但我不知道如何从imageURI获取Base64编码.

SER*_*PRO 7

我在Google网上找到了解决方案.我修改了一下这就是结果:

var gotFileEntry = function(fileEntry) { 
    console.log("got image file entry: " +  fileEntry.fullPath); 
    fileEntry.file( function(file) {
        var reader = new FileReader();
        reader.onloadend = function(evt) {
            console.log("Read complete!");
            image64.value = Base64.encode(evt.target.result);
        };
        reader.readAsText(file);
    }, failFile);
};

window.resolveLocalFileSystemURI(imageURI, gotFileEntry, failSystem); 
Run Code Online (Sandbox Code Playgroud)

注意:读取正常的500万像素图像需要大约20秒,而对其进行编码则需要10-15到Base64.


小智 7

SERPRO的上述方法有效......但我必须改变

reader.readAsText(file);
to
reader.readAsDataURL(file);
Run Code Online (Sandbox Code Playgroud)

因此,行

image64.value = Base64.encode(evt.target.result);
Run Code Online (Sandbox Code Playgroud)

可以删除,base64结果可以直接提取为

image64.value = evt.target.result;
Run Code Online (Sandbox Code Playgroud)