J'ai une photo que je veux que mon utilisateur puisse partager sur Instagram et je dois obtenir le répertoire de fichiers local de la photo.
Cependant, je vais chercher mes images en tant que PHAsset (et non ALAsset, toutes les autres réponses semblent couvrir à ce sujet).
En regardant la documentation PHAsset, je ne vois pas de variable 'répertoire local'.
Savez-vous comment obtenir le chemin d'accès à une photo à partir du rouleau d'appareils photo des utilisateurs à l'aide du nouveau cadre photo de ios8?
Voici mon code pour charger la dernière image dans le rouleau de photos des utilisateurs
public func loadLastPhotoIntoGalleryIcon()
{
if(PHPhotoLibrary.authorizationStatus() != PHAuthorizationStatus.Authorized)
{
return
}
var fetchOptions:PHFetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
var fetchResult:PHFetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions)
var lastAsset:PHAsset = fetchResult.firstObject as PHAsset
var options:PHImageRequestOptions = PHImageRequestOptions()
options.version = PHImageRequestOptionsVersion.Current
PHImageManager.defaultManager().requestImageForAsset(lastAsset, targetSize: _view.getGalleryIconSize(), contentMode: PHImageContentMode.AspectFill, options: options)
{
(result, objects) -> Void in
self._view.setGalleryIcon(result)
}
}
Utiliser la saisie de contenu:
asset.requestContentEditingInputWithOptions(PHContentEditingInputRequestOptions()) { (input, _) in
let url = input.fullSizeImageURL
}
Assurez-vous que l'actif est PHAssetMediaType.Image
ou sinon, il pourrait se bloquer lors du déballage d'un élément facultatif.
func getImagesFromAsset(anAsset: PHAsset) {
PHImageManager.default().requestImage(for: anAsset, targetSize: CGSize(width: 600, height: 600), contentMode: .aspectFill, options: nil, resultHandler: { (image, info) in
//resultHandler have info ([AnyHashable: Any])
print(info!["PHImageFileURLKey"])
if let img = image {
self.imgv.image = img
}
})
}
cela pourrait aider coller ceci dans votre méthode CellForRowAt et passer l'argument PHAsset.
PHAsset *asset = YOUR_ASSET;
PHImageManager *manager = [PHImageManager defaultManager];
PHImageRequestOptions *options = [PHImageRequestOptions new];
options.synchronous = YES;
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;
options.resizeMode = PHImageRequestOptionsResizeModeNone;
options.networkAccessAllowed = NO;
[manager requestImageForAsset:YOUR_ASSET targetSize:PHImageManagerMaximumSize contentMode:PHImageContentModeDefault options:options resultHandler:^(UIImage *resultImage, NSDictionary *info){
NSURL *filePath = [info valueForKeyPath:@"PHImageFileURLKey"]
}];
Oui, vous devez convertir PHAsset en ALAsset. Vous pouvez ensuite extraire l’URL de ALAsset . Quelque chose comme ceci:.
asset = PHAsset * asset
[asset requestContentEditingInputWithOptions:[PHContentEditingInputRequestOptions new] completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
NSURL *imageURL = contentEditingInput.fullSizeImageURL;
}];
Assurez-vous que votre PHAsset doit être un type d'imagepour vérifier ce PHAssetMediaType.Image doit être vrai