J'appelle la méthode déléguée d'AVFoundation pour gérer une capture de photos, mais j'ai de la difficulté à convertir l'AVCapturePhoto qu'il génère en UIImage avec l'orientation correcte. Bien que la routine ci-dessous soit réussie, j'obtiens toujours un UIImage orienté vers le droit (UIImage.imageOrientation = 3). Je n'ai aucun moyen de fournir une orientation lors de l'utilisation de la UIImage (données: image) et en essayant d'utiliser d'abord photo.cgImageRepresentation() ?. takeRetainedValue() n'aide pas non plus. Veuillez aider.Comment générer un UIImage à partir de AVCapturePhoto avec une orientation correcte?
L'orientation de l'image est critique ici car l'image résultante est transmise à un flux de travail Vision Framework.
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
}
}
}
MISE À JOUR 1: Lecture Apple Photo Capture Programming Guide (de date pour iOS11), j'ai réussi à trouver une chose que je faisais mal:
- Sur chaque appel de capture (self.capturePhotoOutput .capturePhoto) on doit établir une connexion avec l'objet PhotoOutput et mettre à jour son orientation pour correspondre à l'orientation de l'appareil au moment où la photo est prise. Pour ce faire, j'ai créé une extension de UIDeviceOrientation et l'ai utilisée sur la fonction snapPhoto() que j'ai créée pour appeler la routine de capture et attendre que la méthode de délégué didFinishProcessingPhoto soit exécutée. J'ai ajouté un instantané des codes car les délimiteurs d'exemples de code ne semblent pas les afficher correctement.
Update 2 Lien vers projet complet sur GitHub: https://github.com/agu3rra/Out-Loud
Intéressant, et peut-être un [bug dans un fichier] (http://bugreport.apple.com). Cela semble-t-il également ignorer l'orientation si vous écrivez ces données dans un fichier et utilisez un initialiseur 'UIImage' basé sur un fichier? – rickster
Après avoir ajouté l'appel de connexion sur la routine snapPhoto() (UPDATE 1), il n'ignore plus l'orientation, mais il me renvoie des valeurs d'orientation incorrectes sur l'UIImage que je crée. –
À propos de votre extension d'orientation. Apple a publié AVCam mis à jour. Il y a une extension similaire. 'extension UIDeviceOrientation { var vidéoOrientation: AVCaptureVideoOrientation? {{ switch auto cas .portrait: retour .portrait cas .portraitUpsideDown: retour .portraitUpsideDown cas .landscapeLeft: retour .landscapeRight cas .landscapeRight: retour .landscapeLeft défaut: retour nul }} } ' –