Сохранение данных в виде UIImage с сохранением оригинальных характеристик изображения - PullRequest
1 голос
/ 04 мая 2019

Я удаляю метаданные exif и location из изображений, используя Photoshop и каркасы ввода / вывода изображений:

Сначала я получаю Data из PHAssets:

let manager = PHImageManager()

manager.requestImageData(for: currentAsset, options: options) { (data, dataUTI, orientation, info) in
                if let data = data {
                    dataArray.append(data)
                }
            }

Затем я используюэта функция для удаления метаданных:

 fileprivate func removeMetadataFromData(data: Data) -> NSMutableData? {

            guard let source = CGImageSourceCreateWithData(data as CFData, nil) else {return nil}
            guard let type = CGImageSourceGetType(source) else {return nil}

            let count = CGImageSourceGetCount(source)
            let mutableData = NSMutableData(data: data)
            guard let destination = CGImageDestinationCreateWithData(mutableData, type, count, nil) else {return nil}
            let removeExifProperties: CFDictionary = [String(kCGImagePropertyExifDictionary) : kCFNull, String(kCGImagePropertyGPSDictionary): kCFNull] as CFDictionary
            for i in 0..<count {
                CGImageDestinationAddImageFromSource(destination, source, i, removeExifProperties)
            }

            guard CGImageDestinationFinalize(destination) else {return nil}

            return mutableData
}

Затем я использую это для создания UIImage из NSMutableData объектов, которые я получаю из предыдущей функции:

let image = UIImage(data: mutableData as Data)

и сохраняю изображение для пользователяБиблиотека выглядит так:

PHPhotoLibrary.shared().performChanges({
                        let request = PHAssetChangeRequest.creationRequestForAsset(from: image)
                        let placeholder = request.placeholderForCreatedAsset
                        let albumChangeRequest = PHAssetCollectionChangeRequest(for: collection)
                        if let placeholder = placeholder, let albumChangeRequest = albumChangeRequest {
                            albumChangeRequest.addAssets([placeholder] as NSArray)
                        }

            return mutableData
        }

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

...