ios - 从 UIImagePickerController 获取图像位置

标签 ios objective-c swift uiimagepickercontroller photosframework

我尝试了多种方法来获取通过 UIImagePickerController Camera 拍摄的图像的位置。

我想要实现的是,我想使用 UIImagePickerController Camera 选择一个图像,我必须将它保存到 Photo Library这样只有我才能从中取回 PHAsset 以及与之关联的位置。

   //MARK: Saving an Image to PhotoLibrary and taking back the PHAsset

    class func savingThis(image : UIImage, completion : (asset : PHAsset?) -> ())
    {
        var localIdentifier : String?
        let imageManager = PHPhotoLibrary.sharedPhotoLibrary()

        imageManager.performChanges({ () -> Void in

            let request = PHAssetChangeRequest.creationRequestForAssetFromImage(image)

            if let properAsset = request.placeholderForCreatedAsset {
                localIdentifier = properAsset.localIdentifier
            }
            else {
                completion(asset: nil)
            }

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

                if let properLocalIdentifier = localIdentifier {

                    let result = PHAsset.fetchAssetsWithLocalIdentifiers([properLocalIdentifier], options: nil)
                    if result.count > 0  {
                        completion(asset: result[0] as? PHAsset)
                    }
                    else {
                        completion(asset: nil)
                    }
                }
                else {
                    completion(asset: nil)
                }
        })
    }

我试过这段代码,保存并取回 PHAsset。但问题是这个 PHAsset 没有任何关联的位置,不知道为什么?我错过了什么?

我相信我不必手动将 GPS 数据设置到图像的元数据中,对吗?我认为 Photos FrameworkAsset Library 会处理它。如您所知,Asset Library 已弃用,我们唯一的选择是使用 Photos Framework。我在网上看到,Saving image to Photo Library 可以解决这个问题。不对吗?

还有其他选择吗?我是否应该使用 UIImageWriteToSavedPhotosAlbum 方法将图像保存到 Camera Roll,并且我可以使用 Photos Framework 取回最近的照片。但我认为 UIImageWriteToSavedPhotosAlbum 不会处理位置问题。

你有什么想法吗?

最佳答案

首先感谢所有好心的人来研究这个问题。

我找到了答案。

  //MARK: Saving an Image to PhotoLibrary and taking back the PHAsset

    class func savingThis(image : UIImage, completion : (asset : PHAsset?) -> ())
    {
        var localIdentifier : String?
        let imageManager = PHPhotoLibrary.sharedPhotoLibrary()

        imageManager.performChanges({ () -> Void in

            let request = PHAssetChangeRequest.creationRequestForAssetFromImage(image)

            request.location = // Assigned current location here :)

            if let properAsset = request.placeholderForCreatedAsset {
                localIdentifier = properAsset.localIdentifier
            }
            else {
                completion(asset: nil)
            }

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

                if let properLocalIdentifier = localIdentifier {

                    let result = PHAsset.fetchAssetsWithLocalIdentifiers([properLocalIdentifier], options: nil)

                    if result.count > 0   {
                        completion(asset: let asset = result[0] as? PHAsset)
                    }
                    else {
                        completion(asset: nil)
                    }
                }
                else {
                    completion(asset: nil)
                }
        })
    }

关于ios - 从 UIImagePickerController 获取图像位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38473369/

相关文章:

ios - 无法以 .p12 格式导出 Apple 生产推送 SSL 证书

ios - 解析 DynamoDB batchGetItem JSON 输出

ios - iPad-物镜-C-键盘-一切都从左向右移动,而不是向下移动

ios - 向下滚动时 UISearchBar 不随 Tableview 移动

ios - 如何从 swift 2 中的核心数据中删除值

ios - 本地通知立即触发,而不是按计划触发

ios - block 内的静态变量

ios - 修改 UIDatePicker 选择指示器色调颜色

ios - 苹果虫?未调用 UICollectionView targetContentOffsetForProposedContentOffset

ios - CGImageCreateWithImageProvider:无效的图像尺寸:180 x 180