簡體   English   中英

獲取 PHAsset 的本地文件路徑

[英]Get the local file path of a 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)
    }

}

使用內容編輯輸入:

asset.requestContentEditingInput(with: PHContentEditingInputRequestOptions()) { (input, _) in
        let url = input.fullSizeImageURL
}

確保資產是PHAssetMediaType.Image否則在解壓可選時可能會崩潰。

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。

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"]

}];

資產=PHAsset *資產

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

確保你的 PHAsset 應該是一個圖像類型來檢查這個 PHAssetMediaType.Image 應該是真的

是的,您必須將 PHAsset 轉換為 ALAsset,然后您才能從 ALAsset 中獲取 url。 像這樣:PHImageManager.defaultManager().requestAVAssetForVideo....

請求資產信息以開始內容編輯會話。

- (PHContentEditingInputRequestID)requestContentEditingInputWithOptions:(PHContentEditingInputRequestOptions *)options 
                                                      completionHandler:(void (^)(PHContentEditingInput *contentEditingInput, NSDictionary *info))completionHandler;

包含全尺寸圖像數據的文件的 URL。

@property(readonly, copy) NSURL *fullSizeImageURL;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM