Cordova - Ler imagem grande corrompe a imagem

Estou usando o seletor de imagens (cordova-imagePicker) para obter imagens da galeria e enviá-las para um servidor.

Estou usando o Cordova 6.1.1 com plataforma Android 5.1.1 e os seguintes plugins:

cordova-plugin-camera 2.2.0 "Camera"
cordova-plugin-compat 1.0.0 "Compat"
cordova-plugin-device 1.0.1 "Device"
cordova-plugin-file 4.2.0 "File"
cordova-plugin-imagepicker 1.1.0 "ImagePicker"
cordova-plugin-inappbrowser 1.4.0 "InAppBrowser"
cordova-plugin-media 2.3.0 "Media"

Como retorno de chamada para o plug-in, estou convertendo o caminho que chego a um arquivo usando o código a seguir. Note que eu usoresolveFile porque esse código está sendo executado também na área de trabalho, nesse caso, a entrada já é um objeto File.

var resolveFile = function(entry) {
    if (typeof(entry) === "string") {
        var deferred = $q.defer();
        // first convert to local file system URL
        window.resolveLocalFileSystemURL(entry, function(fileEntry) {
            // now read/convert the file to file object.
            fileEntry.file(function(file) {
                console.log("File converted to file entry");
                deferred.resolve(file);
            }, function(err) {
                console.log("Failed to convert to file entry", err);
                deferred.reject(err);
            });
        }, function(err) {
            console.log("Failed to resolve to file URL", err);
            deferred.reject(err);
        });

        return deferred.promise;
    } else {
        return $q.when(entry);
    }
};

Por sua vez, isso é usado para ler a imagem e passá-la para uma função que a carrega no servidor ($files é o que estou obtendo do plug-in ou da entrada no caso do desktop / navegador):

var upload = function () {
    if (!$files[currentFile]) {
        onAllFinished();
        return;
    }
    file = $files[currentFile];
    beforeLoad(file);
    fileReader = new FileReader();
    fileReader.onload = onload;
    fileReader.onprogress = progress;
    resolveFile(file).then(function(actualFile) {
        fileReader.readAsDataURL(actualFile);
    });
    currentFile++;
};

Acima, o onload corta os dados da imagem (após 'base64,' na cadeia de caracteres) e os envia para o código de upload que espera uma cadeia de base64 e faz o upload dos dados para o servidor usando uma simples chamada AJAX:

var uploadPhoto = function(url, photo, callback, error)
    $http.post(url, {
        photo: photo,
    })
    .success(callback)
    .error(function (data, status, headers, config) {
        if (error)
            error(data, status, headers, config);
    });

A última função também funciona com o plugin da câmeraplugin da câmera usandoDATA_URI target (eu sei, não é recomendado), que também retorna uma string base64 (para que eu possa reutilizar o código).

Parece-me que há algo errado com a saída do leitor de arquivos (suponho). O que (eu acho) sugere que é que as imagens pequenas (10s kb) são carregadas muito bem, bem como a sequência base64 já preparada a partir do plug-in da câmera, mas imagens maiores (poucos MBs) que passam pelo leitor de arquivos (no Android, na área de trabalho, tudo bem ) são carregados corrompidos (veja abaixo).

Alguém já teve esses problemas? Alguém pode sugerir uma correção (além de alterar o código para usar o plugin FileTransfer)?

A imagem original:

A imagem carregada (corrompida). Observe que algumas delas são lidas / carregadas corretamente:

questionAnswers(1)

yourAnswerToTheQuestion