Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS是否存储exif数据,是否有新的方法从iOS中的照片中读取位置数据?_Ios_Swift_Geolocation_Exif_Photos - Fatal编程技术网

iOS是否存储exif数据,是否有新的方法从iOS中的照片中读取位置数据?

iOS是否存储exif数据,是否有新的方法从iOS中的照片中读取位置数据?,ios,swift,geolocation,exif,photos,Ios,Swift,Geolocation,Exif,Photos,我想将读取用户照片的位置合并到一个应用程序中,这样我就了解了exif以及它是如何存储lat/lon的。我有人帮我编码,对于应用程序中的一些图像,它将解析所选图像的exif。。。但对于大多数图像,exif中没有位置数据。我检查了iOS照片应用程序,在那里,位置数据正确地显示了所有照片上的图像,并将其显示在地图上 我也在我的macbook上测试了一下,发现了一些令人惊讶的东西。当我在macbook上的照片应用程序上单击鼠标右键并单击“获取图像信息”时,它显示了位置,但当我将其复制到桌面时,它就不再具

我想将读取用户照片的位置合并到一个应用程序中,这样我就了解了exif以及它是如何存储lat/lon的。我有人帮我编码,对于应用程序中的一些图像,它将解析所选图像的exif。。。但对于大多数图像,exif中没有位置数据。我检查了iOS照片应用程序,在那里,位置数据正确地显示了所有照片上的图像,并将其显示在地图上

我也在我的macbook上测试了一下,发现了一些令人惊讶的东西。当我在macbook上的照片应用程序上单击鼠标右键并单击“获取图像信息”时,它显示了位置,但当我将其复制到桌面时,它就不再具有位置数据。也许是一个新的安全功能

我的问题是如何编写一个能够正确获取位置的应用程序,以便该应用程序能够帮助用户捕获记忆?如果手机的照片应用程序可以看到位置,那么这意味着数据就在那里,因此,令人沮丧的是,每当复制图像时,位置数据都会被剥离。也许我需要在调用let image=info[UIImagePickerControllerOriginalImage]之前以某种方式读取数据,因为这样做会以某种方式剥离位置信息?如果是这样,我该怎么做?也许有更好的技术


-如果有任何帮助,我们将不胜感激,我被难住了…

我正在为我的应用程序使用Phaset,请看一看。您不必检查exif数据来获取图像的位置。我认为您可以使用相同的属性位置。还可以与UIImagePicker协调。。但我不确定

public func setExiffrom(url:URL?){
    if url == nil{
        return
    }

    let imagedata = try! Data.init(contentsOf: url!)
    let source: CGImageSource = CGImageSourceCreateWithData((imagedata as CFData), nil)!
    if let object = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as? [String: Any]{
        self.imageView.image = UIImage(data: imagedata)
        self.exif = Exif(object)

        self.textView.text = self.exif?.gps?.getFormattedString(valueSeperator: " = ", lineSeperator: "")
    }
}

public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {

    let image = info[UIImagePickerControllerOriginalImage] as? UIImage
    let url = info[UIImagePickerControllerImageURL] as? URL

    self.imageView.image = image
    self.choosenImage = image

    self.setExiffrom(url: url)
    self.dismiss(animated: true, completion: nil)
}

如果它对其他人有帮助的话,我在苹果开发者论坛上找到了这个帖子

            // request options for PHAsset
            let allPhotosOptions = PHFetchOptions()
            allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]

            // get the requested AssetData
            fetchResult = PHAsset.fetchAssets(with: allPhotosOptions)

            // check if we got any
            if fetchResult != nil {

                // loop over result
                for index in 0 ..< fetchResult!.count {

                    // take the next item
                    let item = fetchResult!.object(at: index)

                    // check if it is a photo
                    if item.mediaType == .image {

                        // yes, it is a photo, so check location

                        // check if the location data is valid
                        if item.location != nil {

                            // as an example: create a mapPoint from the coordination
                            let locationPoint = MKMapPointForCoordinate(item.location!.coordinate)

                         } // location not nil
                    } // is an image
               } // loop
          } // result not nil