我无法将图片转换为使用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
});
});
结果数组返回一个结果数组,如: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;
};
但是如何将它集成到代码中呢?
我试过这个(只需要选择一张图片):
$cordovaImagePicker.getPictures(options)
.then(function (results) {
convertImgToBase64URL(results[0], function(base64Img){
self.chosenImage = base64Img;
});
}, function(error) {
console.log(error);
});
但是self.chosenImage被设置为空白。
可能是一个异步问题,但如何最好地解决它?
答案 0 :(得分: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);
答案 1 :(得分: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
};
答案 2 :(得分:1)
这是一个老问题,但我认为主要要求没有得到解答,尽管替代提案很好。 因此,只需指出遵循建议方式的方法,就可以使用此Base64 plugin。
照常安装
cordova plugin add https://github.com/hazemhagrass/phonegap-base64
并在$cordovaImagePicker.getPictures
成功回调
$cordovaImagePicker.getPictures(options)
.then(function (results) {
for (var i = 0; i < results.length; i++) {
console.log('Image URI: ' + results[i]);
$scope.imageUri = results[i];
// Encode URI to Base64
window.plugins.Base64.encodeFile($scope.imageUri, function(base64){
// Save images in Base64
$scope.images.push(base64);
});
}
}, function(error) {
// error getting photos
});
答案 3 :(得分:0)
如果您只是想要传输图片,那么您无法做到这一点。 您可以使用fileTransferPlugin。 希望这会帮助你。