我正在尝试从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,它仍会返回相同的对象。
答案 0 :(得分:1)
我认为您有capture plugin和camera 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;
});