20

我有一张照片,我希望我的用户能够在 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)
    }

}
4

6 回答 6

13

使用内容编辑输入:

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

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

于 2015-03-05T13:41:51.267 回答
1
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。

于 2018-07-06T13:01:48.383 回答
0
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"]

}];
于 2018-06-27T03:57:47.720 回答
0

资产=PHAsset *资产

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

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

于 2018-11-15T11:18:52.140 回答
-1

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

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

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

@property(readonly, copy) NSURL *fullSizeImageURL;
于 2017-02-17T12:53:33.280 回答
-1

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

于 2015-10-29T08:31:38.363 回答