Ionic Camera Plugin在Android上返回数组而不是ImageURI

时间:2016-08-16 20:09:59

标签: android cordova ionic-framework camera cordova-plugins

我正在尝试从Ionic Cordova相机插件中获取base64图像,但它返回一个包含以下详细信息的数组

MediaFile 
    end: 0
    fullPath: "file:/storage/emulated/0/Pictures/1471377463771.jpg"
    lastModified: null
    lastModifiedDate: 1471377464000
    localURL: "cdvfile://localhost/sdcard/Pictures/1471377463771.jpg"
    name: "1471377463771.jpg"
    size: 3188654
    start: 0
    type: "image/jpeg"

我尝试使用fullPath将图像转换为base64

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

但是这会让我失望。以下是我对相机插件的主要调用。

$scope.takePhoto = function () {
    var options = {
        destinationType: Camera.DestinationType.FILE_URI,
        sourceType: Camera.PictureSourceType.CAMERA,
    };

    $cordovaCapture.captureImage(options).then(function (imageURI) {
        $scope.convertImgToBase64URL(imageURI[0].fullPath, function (base64Img) {
            $scope.dataImg = "data:image/jpeg;base64," + base64Img;
            $scope.modal.show();
        })
    }, function (err) {
        // An error occurred. Show a message to the user
    });
}

注意:如果我使用Data_URL而不是FILE_URI,它仍会返回相同的对象。

1 个答案:

答案 0 :(得分:1)

我认为您有capture plugincamera plugin的混合文档。 capture plugin获取一个对象,指定要拍摄的图像数量

var options = { limit: 3 };

看起来你正在传递对应于camera plugin的参数。

我认为你最好不要使用camera plugin而不是捕捉它,如果只是为了拍照。你的代码最终会像这样:

var options = {
    quality: 75,
    destinationType: Camera.DestinationType.DATA_URL,
    sourceType: Camera.PictureSourceType.CAMERA,
    allowEdit: false,
    encodingType: Camera.EncodingType.JPEG,
    targetWidth: 720,
    targetHeight: 1280,
    popoverOptions: CameraPopoverOptions,
    saveToPhotoAlbum: false,
    correctOrientation: true
};

cordovaCamera.getPicture(options).then(function (imageData) {
    var base64Image = "data:image/jpeg;base64," + imageData;
});