У меня есть следующий код для сохранения RAW-изображения в формате JPEG для рулона камеры, но у него есть три проблемы: 1) это зеркальное изображение, 2) оно повернуто на 90 градусов, и 3) это низкое разрешение.iOS 10 Сохранить RAW Фотокамера в камере
// In my PhotoCaptureDelegate
func capture(_ captureOutput: AVCapturePhotoOutput, didFinishProcessingRawPhotoSampleBuffer rawSampleBuffer: CMSampleBuffer?, previewPhotoSampleBuffer: CMSampleBuffer?, resolvedSettings: AVCaptureResolvedPhotoSettings, bracketSettings: AVCaptureBracketedStillImageSettings?, error: Error?) {
if (rawSampleBuffer != nil) {
let temporaryDNGFileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("\(resolvedSettings.uniqueID)lld.dng")!
let temporaryJPGFileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("\(resolvedSettings.uniqueID)lld.jpg")!
let imageData = AVCapturePhotoOutput.dngPhotoDataRepresentation(forRawSampleBuffer: rawSampleBuffer!, previewPhotoSampleBuffer: previewPhotoSampleBuffer)
try! imageData?.write(to: temporaryDNGFileURL)
PHPhotoLibrary.requestAuthorization({ (status) in
if status == .authorized {
PHPhotoLibrary.shared().performChanges({
let options = PHAssetResourceCreationOptions()
options.shouldMoveFile = true
//Write Raw:
PHAssetCreationRequest.forAsset().addResource(with: .photo, fileURL: temporaryDNGFileURL, options: options)
// Process Raw to JPG
if let ciRawFilter = CIFilter(imageData: imageData! as Data, options: nil) {
let cs = CGColorSpace(name: CGColorSpace.displayP3)!
do {
try self.contextForSaving.writeJPEGRepresentation(of: ciRawFilter.outputImage!, to: temporaryJPGFileURL, colorSpace: cs, options: [ kCGImageDestinationLossyCompressionQuality as String: 1.0])
PHAssetCreationRequest.forAsset().addResource(with: .photo, fileURL: temporaryJPGFileURL, options: options)
} catch _ {
print("error with jpeg conversion")
}
}
}, completionHandler: { [unowned self] success, error in
if let error = error {
print("Error occurered while saving photo to photo library: \(error)")
} else {
print("Raw photo written to photo library.")
}
if FileManager.default.fileExists(atPath: temporaryDNGFileURL.path) {
do {
(try FileManager.default.removeItem(at: temporaryDNGFileURL))
}
catch _ {
print("could not remove temporary file")
}
}
self.didFinish()
}
)
}
else {
self.didFinish()
}
})
} else {
print("Error capturing photo: \(error)")
}
}
Я знаю, как захватить JPEG напрямую, но я сначала пытаюсь применить некоторые пользовательские фильтры к RAW-данным.
Пожалуйста, помогите, если вы можете, заранее спасибо!
спасибо @ nav1729! Можете ли вы создать резервную копию нескольких строк и показать мне, как вы создали rawFilter? То, что я делаю, похоже, не работает для меня. Я все еще получаю вверх стороной вниз 640x852 пусть ImageData = AVCapturePhotoOutput.dngPhotoDataRepresentation (forRawSampleBuffer: rawSampleBuffer !, previewPhotoSampleBuffer: previewPhotoSampleBuffer) пусть ciRawFilter = CIFilter (ImageData: ImageData как данные, параметры: ноль) ' –
@DanHixon, я также создавал сырой фильтр, как вы упомянули в своем собственном ответе. Я использовал kCGImageSourceTypeIdentifierHint. Я не знал, что это ключ. Я просто подражал образцу приложения appleexpose apple. Спасибо за информацию. Извините, что не отвечал ранее, так как я не проверял почту/сайты в течение некоторого времени. – nav1729