Cordova Image Picker转换为base64

Rob*_*tin 5 javascript angularjs cordova

我无法将图像转换为使用ngCordova imagePicker选择的base64格式.

为了简单起见,Cordova网站上提供的代码(有效)是这样的:

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
});
});
Run Code Online (Sandbox Code Playgroud)

结果数组返回一个结果数组,如:file /// ...但是如何从这里转换?我想要一个函数,您将值传递给(文件)并返回base64字符串.

这是一个尝试这个的函数:

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;
    };
Run Code Online (Sandbox Code Playgroud)

但是如何将它集成到代码中呢?

我试过这个(只需要选择一张图片):

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

                        self.chosenImage = base64Img;                                
                    });                          

             }, function(error) {
                console.log(error);
             }); 
Run Code Online (Sandbox Code Playgroud)

但是self.chosenImage被设置为空白.

可能是一个异步问题,但如何最好地解决它?

Wil*_*ham 10

你可以使用$ cordovaCamera并将sourceType更改为Camera.PictureSourceType.PHOTOLIBRARY吗?

document.addEventListener("deviceready", function () {

    var options = {
      quality: 50,
      destinationType: Camera.DestinationType.DATA_URL,
      sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
      allowEdit: true,
      encodingType: Camera.EncodingType.JPEG,
      targetWidth: 100,
      targetHeight: 100,
      popoverOptions: CameraPopoverOptions,
      saveToPhotoAlbum: false
    };

    $cordovaCamera.getPicture(options).then(function(imageData) {
      var image = document.getElementById('myImage');
      image.src = "data:image/jpeg;base64," + imageData;
    }, function(err) {
      // error
    });

  }, false);
Run Code Online (Sandbox Code Playgroud)


小智 2

有趣的是,ngCordova ImagePicker没有将图片转换为base64的功能。然而,ngCordova $cordovaCamera 函数可以,尽管仅适用于立即拍摄的照片。

这里等效的选项是

 var options = {
  quality: 80,
  destinationType: Camera.DestinationType.DATA_URL,
  sourceType: Camera.PictureSourceType.CAMERA,
  allowEdit: true,
  encodingType: Camera.EncodingType.JPEG,
  targetWidth: 800,
  targetHeight: 800,
  popoverOptions: CameraPopoverOptions,
  saveToPhotoAlbum: false
};
Run Code Online (Sandbox Code Playgroud)

来源: http: //ngcordova.com/docs/plugins/camera/