Est-ce que quelqu'un peut me dire ou me montrer comment obtenir une image de la galerie d'images du téléphone dans Phonegap / Android? Il y a des docs pour accéder à la caméra (ce qui fonctionne bien) mais pas à choisir une image existante.
Je recherche Phonegap / Javascript plutôt que Java.
Merci d'avance!
Erm, les Camera
couvrent. Cela ne fonctionne-t-il pas pour vous? Découvrez Camera.PictureSourceType
pour plus de détails. Le site docs donne cet exemple pour dériver une image ainsi:
function getPhoto(source) { // Retrieve image file location from specified source navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, destinationType: destinationType.FILE_URI, sourceType: source }); }
sourceType
est le bit crucial ici. Il peut être Camera.PictureSourceType.CAMERA
(par défaut), ou plus utile pour vous, il peut être Camera.PictureSourceType.PHOTOLIBRARY
ou Camera.PictureSourceType.SAVEDPHOTOALBUM
.
Documentation caméra
Vous pouvez également utiliser la bibliothèque suivante: https://github.com/wymsee/cordova-imagePicker Je préfère celui-ci étant plus petit, facile à mettre en œuvre et ne nécessite pas d'autorisation pour la caméra.
Jetez un oeil à cette publication , cela peut vous aider.
Parfois, vous pouvez rencontrer un problème lors du téléchargement d'une image existante. La solution est simple, par cette réponse . En bref, vous devez convertir l'URI natif Android sur un que l'API peut utiliser:
// URL you are trying to upload from inside gallery window.resolveLocalFileSystemURI(img.URI, function(entry) { console.log(entry.fullPath); }, function(evt){ console.log(evt.code); } );
document.addEventListener("deviceready",function(){ window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem){ var sdcard = fileSystem.root; sdcard.getDirectory('dcim/camera',{create:false}, function(dcim){ var directoryReader = dcim.createReader(); directoryReader.readEntries(function(entries){ for (var i=0; i<entries.length; i++) { entries[i].file(function(f){ var reader = new FileReader(); reader.onloadend = function (evt) { var url= evt.target.result;//base64 data uri console.log(url) reader.abort(); }; reader.readAsDataURL(f); },function(error){ console("Unable to retrieve file properties: " + error.code); }); } },function(e){ console.log(e.code); }); }, function(error){ console.log(error.code); }); }, function(evt){ // error get file system console.log(evt.target.error.code); }); } , true);
Je travaille sur le plug-in cordova-plugin-photothèque-bibliothèque qui fournit une plate-forme multi-plate-forme pour énumérer à travers toutes les photos sur le périphérique.
Usage:
cordova.plugins.photoLibrary.getLibrary(function (library) { // Here we have the library as array cordova.plugins.photoLibrary.getThumbnailUrl(library[0], function (thumbnailUrl) { image.src = thumbnailUrl; }, function (err) { console.log('Error occured'); }, { thumbnailWidth: 512, thumbnailHeight: 384, quality: 0.8 }); });