iOS - UIImageView - comment gérer UIImage orientation d'image
Est-il possible de configurer UIImageView à manipuler l'image de l'orientation? Lorsque j'ai mis le UIImageView à l'image de l'orientation DROIT (c'est la photo de la pellicule), l'image pivote de droite, mais je tiens à montrer dans la bonne orientation, comme elle a été prise.
Je sais que je peux faire tourner une image de données, mais il est possible de le faire plus élégant?
Merci
Vous devez vous connecter pour publier un commentaire.
Si je comprends bien, ce que vous voulez faire est de les ignorer l'orientation de la UIImage? Si oui, alors vous pourriez faire ceci:
De sorte que vous êtes en train de créer un nouveau UIImage avec les mêmes données de pixels que l'original (référencé par l'intermédiaire de son CGImage de la propriété), mais vous êtes en spécifiant une orientation qui ne tourne pas les données.
CGContext
avecCGBitmapContextCreate
(ou avec leUIGraphicsBeginImageContext
abrégée), l'utilisationCGContextRotateCTM
pour définir une rotation, utiliserdrawInRect:
sur leUIImage
ouCGContextDrawImage
avec l'image duCGImage
de la propriété, puis convertir le contexte d'une image, soit avecUIGraphicsGetImageFromCurrentImageContext
(et, ensuite,UIGraphicsEndImageContext
) si vous avez utilisé UIKit pour créer le contexte, ouCGBitmapContextCreateImage
si vous étiez coller avec les Graphiques de Base. UIKit n'est pas thread-safe, mais le code sera plus lisible.Vous pouvez éviter complètement manuellement en faisant les transformations et mise à l'échelle vous-même, comme suggéré par an0 dans cette réponse ici:
La documentation de la UIImage méthodes taille et drawInRect stipule explicitement qu'ils tiennent compte de l'orientation.
J'ai converti le code dans L'Anomie de réponse ici (copier-collé ci-dessus par suvish valsan) dans Swift:
(J'ai remplacé tous les occurencies du paramètre
image
avecself
, parce que mon code est une extension surUIImage
).EDIT: Swift 3 version.
La méthode retourne une option, parce que beaucoup d'intermédiaires, les appels peuvent échouer et je n'aime pas utiliser
!
.(Note: Swift version 3 odes compiler sous Xcode 8.1, mais je n'ai pas testé, il fonctionne réellement. Il y a peut être une faute de frappe quelque part, mélangés largeur/hauteur, etc. Hésitez pas à point/corriger les éventuelles erreurs).
func viewDidLoad
. Cette image est de samsung de téléphone photos.google.com/share/... et a 270 CW orientation de données exif. Voici comment je l'utiliselet background: UIImage? = UIImage(named: "background_image")?.fixOrientation() backgroundImage.image = background
Cette méthode vérifie d'abord l'orientation actuelle de UIImage et puis ça change de l'orientation dans un sens horaire moyen et retour UIImage.Vous pouvez afficher cette image en tant que
Swift 4 version
Swift 3.1
ici est à la fois viable exemple de la morue, compte tenu de l'orientation d'image:
UIImage extension rapide. Vous n'avez pas besoin de faire tout ce que le retournement à tous, vraiment. Objective-C original est ici, mais j'ai ajouté les bits qui respecte l'alpha de l'image d'origine (grossièrement, mais il fonctionne à différencier opaque des images à partir d'images transparentes).
J'ai converti le code de @Nicolas Miari réponse à Swift 3 dans le cas où quelqu'un en a besoin
imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any] let imageCaptured:UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage
image est toujours rightOrientation et cette méthode est le retour de l'image 🙁Grâce à Waseem05 pour son Swift 3 traduction, mais sa méthode ne fonctionne que pour moi quand j'ai enveloppé à l'intérieur d'une extension de UIImage et l'a placé à l'extérieur/en-dessous de la classe parent comme suit:
Puis l'a appelé avec:
Et tout allait bien! Apple devrait rendre plus facile à jeter de l'orientation lorsque nous n'avons pas besoin avant/arrière caméra et haut/bas/gauche/droite dispositif d'orientation des métadonnées.
Si vous avez besoin de faire tourner et de fixer l'orientation des images ci-dessous extension serait utile.
}
Swift version 3.0 de Tommy réponse
L'appeler:
imageView.image?.fixImageOrientation()
ouUIImage(named: "someImage").fixImageOrientation()
Bonne chance à tous!
Inspiré de @Aqua de Réponse.....
en Objective-C