ios - 使用 Photos Framework 获取相机拍摄的照片的 URL

标签 ios uiimagepickercontroller phasset

我有一个应用程序使用 UIImagePickerController 从相机和照片库中检索照片。 在图像选择器委托(delegate)中,我只想保存所选图像的 NSURL (UIImagePickerControllerReferenceURL) 以节省内存。当用户稍后需要查看图像时,我直接从照片库使用 PHCachingImageManager 加载它。

现在 - 这整件事对用户从库中选择的图片非常有用,但对相机直接拍摄的图片却不行(因为没有 URL)。我目前正在尝试使用 PHAsset 保存图片,但我不知道如何获取保存图片的 NSURL。

这是我一直在做的事情:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject])
{
    picker.dismissViewControllerAnimated(true, completion: nil)

    let pickedImage = info[UIImagePickerControllerOriginalImage] as! UIImage

    if picker.sourceType == .Camera
    {
        // When taking a picture with the camera, store it in the user roll
        PHPhotoLibrary.sharedPhotoLibrary().performChanges(
            { () -> Void in

                // save the image
                PHAssetCreationRequest.creationRequestForAssetFromImage(pickedImage)

                // TODO how to get the asset url

            }, completionHandler:
            { (finished, error) -> Void in
                if (finished)
                {

                }
            }
        )

    }
    else
    {
        let pickedImageUrl: NSURL? = info[UIImagePickerControllerReferenceURL] as? NSURL

        currentImageUrl = pickedImageUrl

        currentImage = pickedImage

        toggleImageInfoView(true)
        toggleMapState(true)
    }


}

关于如何获取已保存图片的 url 有什么想法吗?

最好的, 乔治

最佳答案

更新:似乎我找到了这个问题的答案。

第 1 步:我将图像保存到相机

UIImageWriteToSavedPhotosAlbum(image.image, self, #selector(cameraImageSavedAsynchronously), nil)

这是异步完成的,因此请确保在操作完成时设置一个选择器。

第 2 步:操作完成后,我执行以下操作:

func fetchLastImage(completion: (localIdentifier: String?) -> Void)
{
    let fetchOptions = PHFetchOptions()
    fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
    fetchOptions.fetchLimit = 1

    let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions)
    if (fetchResult.firstObject != nil)
    {
        let lastImageAsset: PHAsset = fetchResult.firstObject as! PHAsset
        completion(localIdentifier: lastImageAsset.localIdentifier)
    }
    else
    {
        completion(localIdentifier: nil)
    }
}

我使用 PHAsset 获取相机胶卷中的最后一张图像并保存图像的本地标识符。这不是一个 URL,而是一个不会改变的唯一标识符。这样,您就可以完美访问保存的图像。

希望这对其他人有帮助!

关于ios - 使用 Photos Framework 获取相机拍摄的照片的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511960/

相关文章:

ios - Pebble 和 firebase js 不能在 IOS 上一起玩

ios - Swift 自定义图像选择器 Controller - 第一次不加载媒体

iphone - 替换 不添加 : UICollectionView

ios - SourceKitService 消耗 CPU 并导致 Xcode 停止

swift - ALAsset 已弃用 - 使用 Photos Framework 中的 PHAsset

ios - 在 uiimagePickerController IOS 7 中以编程方式删除状态栏

ios - 使用 PHAsset 检索多个图像

swift - 如何从视频 URL 获取视频的 PHAsset?

ios - 创建新文件时在 Swift 中继承 Viewcontroller

iphone - ALAsset 视频压缩