Сохраняет ли iOS exif-данные? Существует ли новый способ считывания данных о местоположении с фотографий в iOS? - PullRequest
0 голосов
/ 24 августа 2018
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)
}

Я хотел бы включить чтение местоположения фотографий пользователя в приложение, чтобы я узнал об exif и как он хранится в широте и долготе. У меня был кто-то, кто помог бы мне с кодировкой, и для некоторых изображений в приложении он хорошо бы проанализировал exif из выбранного изображения ... НО для большинства изображений в exif не было данных о местоположении. Я проверил в приложении iOS Photos, и там все данные о местоположении были правильно представлены для всех изображений (при нажатии на фотографию они отображаются на карте)

Я также проверил на своем MacBook и нашел что-то удивительное. Когда я щелкнул правой кнопкой мыши и нажал «получить информацию» на изображении в приложении «Фотографии» на макбуке, оно отображалось вместе с местоположением, но как только я скопировал его на рабочий стол, у него больше не было данных местоположения. Возможно, новая функция безопасности?

Мой вопрос: как мне написать приложение, которое правильно определяет местоположение, чтобы приложение могло помочь пользователям захватывать воспоминания? Если приложение «Фотографии» на телефоне может видеть местоположение, это означает, что данные там есть, и, к сожалению, всякий раз, когда изображение копируется, появляется информация о местоположении. Возможно, мне нужно как-то прочитать данные ДО того, как я вызову «let image = info [UIImagePickerControllerOriginalImage], потому что это как-то удаляет информацию о местоположении? Если да, то как мне это сделать? Может быть, есть просто лучшая техника?

- любая помощь, была бы оценена, я в тупике ...

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

В случае, если это кому-нибудь поможет, я нашел эту ветку на форуме разработчиков Apple ... https://forums.developer.apple.com/thread/96160

0 голосов
/ 24 августа 2018

Я использую PHAsset () для своего приложения, посмотрите на него. Вам не нужно проверять exif-данные, чтобы получить местоположение изображения. Я думаю, что вы можете использовать то же свойство (location.coordinate) также с UIImagePicker .. но я не уверен

            // 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
...