【问题标题】:Get the local file path of a PHAsset获取 PHAsset 的本地文件路径
【发布时间】:2015-02-04 17:39:35
【问题描述】:

我希望我的用户能够在 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)
    }

}

【问题讨论】:

    标签: ios swift instagram phasset photosframework


    【解决方案1】:

    使用内容编辑输入:

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

    确保资产为PHAssetMediaType.Image,否则在解压可选组件时可能会崩溃。

    【讨论】:

    • input.fullSizeImageURL 无法在设备上加载图像,尽管它正在模拟器上运行
    【解决方案2】:
    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。

    【讨论】:

    • 但由于苹果隐私政策,您将无法访问目录
    【解决方案3】:
    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"]
    
    }];
    

    【讨论】:

      【解决方案4】:

      资产=PHAsset *资产

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

      确保您的 PHAsset 应该是图像类型 检查这个 PHAssetMediaType.Image 应该是真的

      【讨论】:

        【解决方案5】:

        是的,您必须将 PHAsset 转换为 ALAsset,然后您才能从 ALAsset 中获取 url。 像这样的东西: PHImageManager.defaultManager().requestAVAssetForVideo....

        【讨论】:

          【解决方案6】:

          请求资产信息以开始内容编辑会话。

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

          包含全尺寸图像数据的文件的 URL。

          @property(readonly, copy) NSURL *fullSizeImageURL;
          

          【讨论】:

            猜你喜欢
            • 2013-07-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-03-26
            • 1970-01-01
            • 2021-08-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多