84 votes

iOS - UIImageView - comment gérer l'orientation de l'image UIImage ?

Est-il possible de configurer UIImageView pour gérer l'orientation de l'image ? Lorsque je règle le UIImageView à l'image avec orientation DROIT (il s'agit d'une photo du rouleau de l'appareil photo), l'image est tournée vers la droite, mais je veux la montrer dans la bonne orientation, comme elle a été prise.

Je sais que je peux faire pivoter les données d'image mais est-il possible de le faire de manière plus élégante ?

2voto

Mihail Salari Points 662
extension UIImage {
    func fixImageOrientation() -> UIImage {
        UIGraphicsBeginImageContext(self.size)
        self.draw(at: .zero)
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        return newImage ?? self
    }
}
  1. Créer une extension comme l'exemple ci-dessus.

  2. Appelez-le : imageView.image?.fixImageOrientation() ou UIImage(named: "someImage").fixImageOrientation()

  3. Bonne chance à tous !

0 votes

Cela fonctionne bien. Mais la mémoire s'accumule comme n'importe quoi et l'application plante si elle est appelée dans des boucles.

0 votes

@abhimuralidharan, je n'ai pas vérifié dans la boucle, mais il existe à 100% un moyen de postuler.

1voto

Version Swift 3.0 de la réponse de Tommy

let imageToDisplay = UIImage.init(cgImage: originalImage.cgImage!, scale: originalImage.scale, orientation: UIImageOrientation.up)

0voto

umakanta Points 356

Inspiré de @Aqua Answer.....

en Objective C

- (UIImage *)fixImageOrientation:(UIImage *)img {

   UIGraphicsBeginImageContext(img.size);
   [img drawAtPoint:CGPointZero];

   UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   if (newImg) {
       return newImg;
   }

   return img;
}

-1voto

Victor Kosse Points 1

J'ai essayé la solution cochée et elle ne fonctionne pas pour moi. Mais la solution ci-dessous fonctionne pour fixer l'orientation à partir de l'appareil photo avant de convertir en png.

Swift 5 :

let imageToDisplay = originalImage.resize(new: originalImage.resize)

0 votes

Essayez de répondre avec un commentaire plus descriptif et de répondre à la question par une réponse appropriée.

0 votes

@JhonnyTawk merci pour les conseils, j'ai édité la réponse.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X