Прикрепите метаданные к изображению с помощью Photo Framework

Я успешно сохранил изображение в Photo Library с помощью API Photo Framework после того, как пользователь выбрал это изображение из библиотеки с помощью UIImagePickerController.

Поскольку я захватываю изображение внутри своего приложения, я должен позаботиться о метаданных. Я мог сохранить местоположение и дату создания во вновь захваченном изображении и сохранить его в библиотеке.

Но проблема в том, что я хочу прикрепить массу других свойств, я имею в виду, что я хочу прикрепить свойства EXIF и TIFF.

В EXIF есть много таких свойств,

kCGImagePropertyExifDateTimeOriginal kCGImagePropertyExifMaxApertureValue kCGImagePropertyExifSpatialFrequencyResponse kCGImagePropertyExifLensModel

Как мне получить эти значения с текущего устройства, прикрепить их к изображению и сохранить в Photo Library?

Вот полный код, который я использую для сохранения изображения в Photo Library после того, как взял его из UIImagePickerController. Я хотел бы добавить строки метаданных где-нибудь в эту функцию, прежде чем сохранять ее в Photo Library.

//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 = LocationManager.sharedInstance.locationManager.location
            request.creationDate = NSDate()

            // Add more properties here - somewhere EXIF, TIFF....

            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)
                }
        })
    }

Это глупый вопрос? Мне не нужно использовать Photos Framework, если есть другой способ прикрепить метаданные, каким бы ни был способ, я просто хочу прикрепить их. Я не знаю. Дайте мне знать ваши предложения?


person Community    schedule 29.08.2016    source источник
comment
Не могу точно сказать, будет ли это работать, так как я не могу проверить в данный момент. Однако я сделал это с другими пользовательскими значениями: let date = NSDate(); setxattr (путь, kCGImagePropertyExifDateTimeOriginal, дата, sizeof (дата), 0, 0)   -  person macandyp    schedule 29.08.2016
comment
@macandyp Дата или время — это самое простое значение для присоединения, а как насчет других свойств, что-то вроде этого? kCGImagePropertyExifMaxApertureValue где я могу найти значение для этого?. Не могли бы вы дать мне больше информации об этом NSData?   -  person    schedule 29.08.2016
comment
stackoverflow.com/questions/26208277/ это пример того, как вы можете это сделать   -  person Oleg Gordiichuk    schedule 29.08.2016
comment
@OlegGordiichuk Да, я видел, что могу прикрепить Author, CopyRight .. и т. д. Это строковые значения, которые я могу ввести в словарь. Я говорю о таких ценностях kCGImagePropertyExifMaxApertureValue? Где вы найдете значение для этого? или это kCGImagePropertyExifLensModel.   -  person    schedule 29.08.2016
comment
Все эти значения являются константами. И должны использоваться в качестве ключей в вашем словаре   -  person Oleg Gordiichuk    schedule 29.08.2016
comment
@OlegGordiichuk Это интересно ... Похоже, я могу присвоить этому ключу любое значение. Хорошо понял.   -  person    schedule 29.08.2016