web-dev-qa-db-fra.com

Obtenir le chemin de fichier local d'un PHAsset

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)
    }

}
19
Aggressor

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.

8
Tomasz Bąk
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.

1
Jayraj Vala
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"]

}];
0
Heisenbean

Oui, vous devez convertir PHAsset en ALAsset. Vous pouvez ensuite extraire l’URL de ALAsset . Quelque chose comme ceci:.

0
Paradise

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

0
khusboo suhasini