이미지 샘플 버퍼의 메타 데이터 중 일부를 이미지와 함께 저장하려고합니다.스위프트 : 사용자 정의 카메라가 수정 된 메타 데이터를 이미지로 저장합니다.
이- 메타 데이터와 함께 해당 이미지 저장을 메타 데이터
- 로 이동 메타 데이터
- 저장 일로부터 방향을 제거 메타 데이터
- 에서 한 방향으로 이미지를 회전 :
내가 필요 문서 디렉토리에
데이터에서 UIImage를 만들려고 시도했지만 그 중 하나가 제거됩니다. 메타 데이터 메타 데이터를 유지하는 데이터에서 CIImage를 사용하여 시도했지만 파일을 회전 할 수 없습니다.
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)
}
}
다음은 이미지 저장 코드입니다.
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)
}
나는 좁은 방'NSSearchPathForDirectoriesInDomains (.DocumentDirectory, .UserDomainMask, 진정한)에서'filePath'를 얻을 수 있으리라 믿고있어! + "name.png"'. 그러나'fileService'는 무엇입니까? 'fileService'는 커스텀 클래스입니까? –
@ Carlos.V'fileService'는'NSFileManager'를 래핑하고 내 인생을 더 쉽게 만들어주는 커스텀 클래스입니다. – SeanRobinson159
실제 메타 데이터를 읽고 수정할 수는 있지만 새 메타를 파일에 쓸 수는 없습니다. '.save()'함수가 어떻게 작동하는지 조금 설명해 주시겠습니까?'fileMan.createFileAtPath (filePath, contents : finalData, attributes : metadata!! [String : AnyObject]) '를 사용하여 시도했지만 메타 데이터는 다른 속성을위한 것입니다. 어쩌면'PHPhotoLibrary'를 사용하고 있습니까? 나는 그런 식으로 시도한다고 생각하지만 100 % 효과가 있을지 확신하지 못합니다. –