web-dev-qa-db-ja.com

PHAssetのローカルファイルパスを取得する

ユーザーにInstagramで共有してもらいたい写真があり、その写真のローカルファイルディレクトリを取得する必要があります。

ただし、私は画像をPHAssetとしてフェッチしています(ALAssetではなく、他のすべての回答がこのテーマをカバーしているようです)。

PHAssetのドキュメントを見ると、「ローカルディレクトリ」変数がありません。

新しいios8 Photoのフレームワークを使用して、ユーザーのカメラロールから写真へのパスを取得する方法を知っていますか?

これは、ユーザーの写真ロールの最後の画像を読み込むための私のコードです

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

コンテンツ編集入力を使用する:

asset.requestContentEditingInputWithOptions(PHContentEditingInputRequestOptions()) { (input, _) in
    let url = input.fullSizeImageURL
}

アセットがPHAssetMediaType.Imageであることを確認してください。そうでない場合、オプションを解凍するとクラッシュする可能性があります。

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

これは、これをCellForRowAtメソッドに貼り付け、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

はい、PHAssetをALAssetに変換する必要があります。その後、ALAssetからURLを取得できます。このようなもの:PHImageManager.defaultManager()。requestAVAssetForVideo ...

0
Paradise

asset = PHAsset * asset

[asset requestContentEditingInputWithOptions:[PHContentEditingInputRequestOptions new] completionHandler:^(PHContentEditingInput *contentEditingInput, NSDictionary *info) {
   NSURL *imageURL = contentEditingInput.fullSizeImageURL;
}];

PHAssetが画像タイプであることを確認して、このPHAssetMediaType.Imageがtrueであることを確認してください

0