Cordova Bildauswahl zu base64 konvertieren

Ich habe Probleme beim konvertieren einer Bilddatei in das base64-format, das ausgewählt wurde mit der ngCordova imagePicker.

Dinge einfach zu halten, den code auf der Cordova-Seite (die funktioniert), ist dies:

module.controller('ThisCtrl', function($scope, $cordovaImagePicker) {

  var options = {
   maximumImagesCount: 10,
   width: 800,
   height: 800,
   quality: 80
  };

  $cordovaImagePicker.getPictures(options)
    .then(function (results) {
     for (var i = 0; i < results.length; i++) {
    console.log('Image URI: ' + results[i]);
  }
}, function(error) {
  //error getting photos
});
});

Den Ergebnissen array liefert ein array mit Ergebnissen wie: file///... aber wie konvertieren von hier? Ich möchte eine Funktion, die Sie übergeben einen Wert zu (die Datei) und gibt die base64-string.

Hier ist eine Funktion, die versucht, dieses:

function convertImgToBase64URL(url, callback, outputFormat){

        var canvas = document.createElement('CANVAS'),
            ctx = canvas.getContext('2d'),
            img = new Image();
        img.crossOrigin = 'Anonymous';
        img.onload = function(){
            var dataURL;
            canvas.height = img.height;
            canvas.width = img.width;
            ctx.drawImage(img, 0, 0);
            dataURL = canvas.toDataURL(outputFormat);
            callback(dataURL);
            canvas = null; 
        };
        img.src = url;
    };

Aber wie integriert man es in den code?

Habe ich versucht, diese (müssen nur wählen ein Bild):

$cordovaImagePicker.getPictures(options)
                .then(function (results) {
                    convertImgToBase64URL(results[0], function(base64Img){

                        self.chosenImage = base64Img;                                
                    });                          

             }, function(error) {
                console.log(error);
             }); 

aber selbst.chosenImage festgelegt wird, zu leeren.

Könnte ein async-Problem, aber wie am besten zu lösen?

Schreibe einen Kommentar