Ich rufe die Delegate-Methode von AVFoundation auf, um eine Fotoaufnahme zu verarbeiten, aber ich habe Schwierigkeiten, das von ihr generierte AVCapturePhoto in ein UIImage mit der richtigen Ausrichtung zu konvertieren. Obwohl die folgende Routine erfolgreich ist, bekomme ich immer eine rechtsgerichtete UIImage (UIImage.imageOrientation = 3). Ich habe keine Möglichkeit, eine Orientierung zu geben, wenn ich die UIImage (data: image) benutze und versuche, zuerst photo.cgImageRepresentation() zu benutzen.takeRetainedValue() hilft auch nicht. Bitte helfen.Wie erzeuge ich ein UIImage von AVCapturePhoto mit korrekter Ausrichtung?
Die Bildausrichtung ist hier entscheidend, da das resultierende Bild in einen Vision Framework-Workflow eingespeist wird.
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
// capture image finished
print("Image captured.")
if let imageData = photo.fileDataRepresentation() {
if let uiImage = UIImage(data: imageData){
// do stuff to UIImage
}
}
}
UPDATE 1: Lesen Apples Photo Capture Programming Guide (veraltet für iOS11), ich habe es geschafft, eine Sache zu finden war ich falsch gemacht:
- Auf jeder Capture-Aufruf (self.capturePhotoOutput .capturePhoto) muss eine Verbindung mit dem PhotoOutput-Objekt hergestellt und die Ausrichtung aktualisiert werden, damit sie der Ausrichtung des Geräts in dem Moment entspricht, in dem das Bild aufgenommen wird. Dafür habe ich eine Erweiterung von UIDeviceOrientation erstellt und sie in der Funktion snapPhoto() verwendet, die ich erstellt habe, um die Erfassungsroutine aufzurufen und darauf zu warten, dass die didFinishProcessingPhoto-Delegate-Methode ausgeführt wird. Ich habe eine Momentaufnahme der Codes hinzugefügt, da die Codebeispiel-Trennzeichen hier nicht korrekt angezeigt werden.
Update 2 Link zum vollständigen Projekt auf GitHub: https://github.com/agu3rra/Out-Loud
Interessante und möglicherweise ein [Fehler in Datei] (http://bugreport.apple.com). Scheint es auch, die Ausrichtung zu ignorieren, wenn Sie diese Daten in eine Datei schreiben und einen dateibasierten 'UIImage'-Initialisierer verwenden? – rickster
Nachdem ich den Verbindungsaufruf für die snapPhoto() - Routine (UPDATE 1) hinzugefügt habe, ignoriert er nicht mehr die Ausrichtung, sondern gibt mir falsche Orientierungswerte für das von mir erstellte UII zurück. –
Über Ihre Ausrichtungserweiterung. Apple hat AVCam aktualisiert veröffentlicht. Es gibt eine ähnliche Erweiterung. 'Erweiterung UIDeviceOrientation { var videoOrientation: AVCaptureVideoOrientation? { Schalter selbst { Fall .portrait: return .portrait Fall .portraitUpsideDown: .portraitUpsideDown Fall .landscapeLeft zurück: Rückkehr .landscapeRight Fall .landscapeRight: return .landscapeLeft default: return null } } } ' –