Я пытаюсь удалить метаданные из изображений DNG с помощью следующей функции:
fileprivate func removeMetadataFromPhotoData(data: Data) -> NSMutableData? {
guard let source = CGImageSourceCreateWithData(data as CFData, nil) else {return nil}
guard var type = CGImageSourceGetType(source) else {return nil}
let imageProperties = CGImageSourceCopyPropertiesAtIndex(source, 0, nil) as Dictionary?
let dngDict = imageProperties?[kCGImagePropertyDNGDictionary]
var newDNGDict:NSMutableDictionary?
if let dict = dngDict {
newDNGDict = editDNGDict(originalDict: dict as! NSMutableDictionary)
}
let count = CGImageSourceGetCount(source)
let mutableData = NSMutableData(data: data)
guard let destination = CGImageDestinationCreateWithData(mutableData, type, count, nil) else {return nil}
let properties: NSMutableDictionary = [String(kCGImagePropertyGPSDictionary): kCFNull]
if let dngDictionary = newDNGDict {
properties[String(kCGImagePropertyDNGDictionary)] = dngDictionary
}
print("SOURCE: \(source)")
for i in 0..<count {
CGImageDestinationAddImageFromSource(destination, source, i, properties as CFDictionary)
}
guard CGImageDestinationFinalize(destination) else {return nil}
return mutableData
}
оператор print печатает значение source
, поэтому источник не равен nil.Однако, когда выполняются следующие строки, я получаю следующие ошибки:
addImageFromSource: 2179: изображение 0 источника равно nil
finalize: 2470: у назначения изображения должен быть хотя бы одинimage
Я делаю тот же процесс для других форматов (JPG, PNG, TIFF и т. д.), и ни у одного из них такой проблемы нет.Буду признателен, если кто-нибудь сможет мне помочь.