ios - 如何获取从 UIImagePicker 拍摄的图片的资源 URL

标签 ios swift image uiimagepickercontroller photokit

我正在尝试了解如何获取保存到相机胶卷的图像的 Assets URL,但找不到太多可以帮助我的方法。我看过 Objective-C 示例,但我没有使用它的经验,很多时候他们使用 ALAssetLibrary,现在已弃用。我所做的只是保存一张照片,但我需要获取 URL 以将其加载到另一个图像中,而该图像的 UIImageView 并不总是存在。尝试将其加载到 View 会使应用程序崩溃。

代码:

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: AnyObject]) {
    imagePicker.dismissViewControllerAnimated(true, completion: nil)
    imageView.image = info[UIImagePickerControllerOriginalImage] as? UIImage
    UIImageWriteToSavedPhotosAlbum((info[UIImagePickerControllerOriginalImage] as? UIImage)!, nil, nil, nil)
    if let detail = self.detailItem {
        print(info.values)
        // ### Where I need to have the image URL ###
        //detail.thumbnail = info[UIImagePickerControllerReferenceURL] as! String
    }
}

最佳答案

来自 Apple Docs:Assets Library 框架从 iOS 9.0 开始被弃用。相反,请改用照片框架,它在 iOS 8.0 及更高版本中提供更多功能和更好的性能来处理用户的照片库。

所以 iOS8 以后使用 Photos APIPHAssetChangeRequestplaceholderForCreatedAsset

    PHPhotoLibrary.sharedPhotoLibrary().performChanges({
    let assetRequest = PHAssetChangeRequest.creationRequestForAssetFromImage(info[UIImagePickerControllerOriginalImage])
    let assetPlaceholder = assetRequest.placeholderForCreatedAsset
}, completionHandler: { success, error in
    // completion handling
})

// I have not tested but this should work

以下用于较旧的 iOS:

func writeImageToSavedPhotosAlbum(_ imageRef: CGImage!,
                         metadata metadata: [NSObject : AnyObject]!,
                  completionBlock completionBlock: ALAssetsLibraryWriteImageCompletionBlock!)

关于ios - 如何获取从 UIImagePicker 拍摄的图片的资源 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34477979/

相关文章:

java - 将两个 YV12 图像缓冲区组合成一个并排图像 Java/Android

ios - 从另一个类添加 View 作为 presentViewController 导致 UIEvents 不工作

ios - 隐藏 View 并删除空格

ios - FMDB 更新语句不使用我的值

ios - 在 iOS 上使用 sqlite 和 grand central dispatch

ios - 如何在 Swift 3.0 中使用动画创建时间延迟

html - 预编译后 html 图像路径是否仍然有效?

xcode - UITableViewCell 从其他 View Controller 上的输入传输运行时断点(lldb)

ios - Swift 如何使用动画淡入新图像然后淡入旧图像

javascript - 从位图中获取像素