Sto provando a salvare ALCUNI metadati da un buffer di esempio dell'immagine insieme all'immagine.Swift: la fotocamera personalizzata salva i metadati modificati con l'immagine
ho bisogno di:
- ruotare l'immagine per l'orientamento dai metadati
- Rimuovere l'orientamento dai metadati
- Salva la data di presa per i metadati
- Salva l'immagine con i metadati nella directory dei documenti
Ho provato a creare un UIImmagine dai dati, ma quello si spegne i metadati. Ho provato a utilizzare un CIImage dai dati, che mantiene i metadati, ma non posso ruotarlo e quindi salvarlo in un file.
private func snapPhoto(success: (UIImage, CFMutableDictionary) -> Void, errorMessage: String -> Void) {
guard !self.stillImageOutput.capturingStillImage,
let videoConnection = stillImageOutput.connectionWithMediaType(AVMediaTypeVideo) else { return }
videoConnection.fixVideoOrientation()
stillImageOutput.captureStillImageAsynchronouslyFromConnection(videoConnection) {
(imageDataSampleBuffer, error) -> Void in
guard imageDataSampleBuffer != nil && error == nil else {
errorMessage("Couldn't snap photo")
return
}
let data = AVCaptureStillImageOutput.jpegStillImageNSDataRepresentation(imageDataSampleBuffer)
let metadata = CMCopyDictionaryOfAttachments(nil, imageDataSampleBuffer, CMAttachmentMode(kCMAttachmentMode_ShouldPropagate))
let metadataMutable = CFDictionaryCreateMutableCopy(nil, 0, metadata)
let utcDate = "\(NSDate())"
let cfUTCDate = CFStringCreateCopy(nil, utcDate)
CFDictionarySetValue(metadataMutable!, unsafeAddressOf(kCGImagePropertyGPSDateStamp), unsafeAddressOf(cfUTCDate))
guard let image = UIImage(data: data)?.fixOrientation() else { return }
CFDictionarySetValue(metadataMutable, unsafeAddressOf(kCGImagePropertyOrientation), unsafeAddressOf(1))
success(image, metadataMutable)
}
}
Ecco il mio codice per il salvataggio dell'immagine.
func saveImageAsJpg(image: UIImage, metadata: CFMutableDictionary) {
// Add metadata to image
guard let jpgData = UIImageJPEGRepresentation(image, 1) else { return }
jpgData.writeToFile("\(self.documentsDirectory)/image1.jpg", atomically: true)
}
Sto assumendo che posso ottenere '' filePath' da NSSearchPathForDirectoriesInDomains (.DocumentDirectory, .UserDomainMask, vero) .Prima! + "nome.png" '. Ma cos'è 'fileService'? 'FileService' è una classe personalizzata? –
@ Carlos.V 'fileService' è una classe personalizzata che ho creato per avvolgere il' NSFileManager' e semplificarmi la vita. – SeanRobinson159
Sono in grado di leggere i metadati effettivi e modificarli, ma non posso scrivere la nuova meta nel file. Puoi spiegare un po 'come funziona la funzione '.save()', ho provato a usare 'fileMan.createFileAtPath (filePath, contenuto: finalData, attributi: metadata come! [String: AnyObject])' ma non salva il metadati, è per altri attributi. Forse stai usando 'PHPhotoLibrary'? Sto pensando di provare in questo modo, ma non sono sicuro che funzionerebbe al 100%. –