Es posible la instalación de UIImageView para manejar orientación de imagen? Cuando me puse el UIImageView de la imagen con la orientación DERECHO (es la foto de rollo de la cámara), la imagen se gira a la derecha, pero quiero mostrar en la orientación adecuada, ya que fue tomada.

Sé que puedo rotar los datos de la imagen, pero es posible hacerlo más elegante?

Gracias

InformationsquelleAutor Martin Pilch | 2012-01-18

13 Comentarios

  1. 133

    Si entiendo, lo que quieres hacer es ignorar la orientación de la UIImage? Si es así, entonces usted podría hacer esto:

    UIImage *originalImage = [... whatever ...];
    
    UIImage *imageToDisplay =
         [UIImage imageWithCGImage:[originalImage CGImage]
                  scale:[originalImage scale]
                  orientation: UIImageOrientationUp];

    Así que usted está creando una nueva UIImage con los mismos datos de píxeles como el original (el que se hace referencia a través de su CGImage de la propiedad), sino que está especificando una orientación que no es la rotación de los datos.

    • Por cierto, ¿cómo puedo rotan los datos de la imagen?
    • Supongo que crearía un tamaño adecuado CGContext con CGBitmapContextCreate (o con el UIGraphicsBeginImageContext abreviada), el uso de CGContextRotateCTM para establecer una rotación, utilice cualquiera drawInRect: en el UIImage o CGContextDrawImage con la imagen del CGImage de la propiedad, a continuación, convertir el contexto de una imagen, ya sea con UIGraphicsGetImageFromCurrentImageContext (y, entonces, UIGraphicsEndImageContext) si usted utiliza UIKit para crear el contexto, o CGBitmapContextCreateImage si usted se pega con el Núcleo de Gráficos. UIKit no es muy seguro para subprocesos, pero el código sería más prolijo.
    • Yo no puedo conseguir que esto funcione, cuando pongo la imagen en un ImageView…sólo muestra la imagen con la orientación original aunque yo soy de la creación de la imagen de espejo de la orientación: [UIImage imageWithCGImage:imagen.CGImage escala:imagen.escala de orientación:UIImageOrientationUpMirrored]…el OP le preguntó sobre el uso de un ImageView pero no puedo conseguir que esta solución funcione en un ImageView…
  2. 45

    Puede evitar por completo manualmente haciendo la transforma y la escala a sí mismo, como se sugiere por el an0 en esta respuesta aquí:

    - (UIImage *)normalizedImage {
        if (self.imageOrientation == UIImageOrientationUp) return self; 
    
        UIGraphicsBeginImageContextWithOptions(self.size, NO, self.scale);
        [self drawInRect:(CGRect){0, 0, self.size}];
        UIImage *normalizedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return normalizedImage;
    }

    La documentación de la UIImage métodos tamaño y drawInRect explícitamente a los estados que tomen en cuenta la orientación.

    • Este es un protector de la vida.
    • La única solución que trabajó rápido, gracias!
  3. 24

    Me convierte el código en La anomia de la respuesta aquí (copia-pega de arriba por suvish valsan) en Swift:

    func fixOrientation() -> UIImage {
    if self.imageOrientation == UIImageOrientation.Up {
    return self
    }
    var transform = CGAffineTransformIdentity
    switch self.imageOrientation {
    case .Down, .DownMirrored:
    transform = CGAffineTransformTranslate(transform, self.size.width, self.size.height)
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI));
    case .Left, .LeftMirrored:
    transform = CGAffineTransformTranslate(transform, self.size.width, 0);
    transform = CGAffineTransformRotate(transform, CGFloat(M_PI_2));
    case .Right, .RightMirrored:
    transform = CGAffineTransformTranslate(transform, 0, self.size.height);
    transform = CGAffineTransformRotate(transform, CGFloat(-M_PI_2));
    case .Up, .UpMirrored:
    break
    }
    switch self.imageOrientation {
    case .UpMirrored, .DownMirrored:
    transform = CGAffineTransformTranslate(transform, self.size.width, 0)
    transform = CGAffineTransformScale(transform, -1, 1)
    case .LeftMirrored, .RightMirrored:
    transform = CGAffineTransformTranslate(transform, self.size.height, 0)
    transform = CGAffineTransformScale(transform, -1, 1);
    default:
    break;
    }
    //Now we draw the underlying CGImage into a new context, applying the transform
    //calculated above.
    let ctx = CGBitmapContextCreate(
    nil,
    Int(self.size.width),
    Int(self.size.height),
    CGImageGetBitsPerComponent(self.CGImage),
    0,
    CGImageGetColorSpace(self.CGImage),
    UInt32(CGImageGetBitmapInfo(self.CGImage).rawValue)
    )
    CGContextConcatCTM(ctx, transform);
    switch self.imageOrientation {
    case .Left, .LeftMirrored, .Right, .RightMirrored:
    //Grr...
    CGContextDrawImage(ctx, CGRectMake(0, 0, self.size.height,self.size.width), self.CGImage);
    default:
    CGContextDrawImage(ctx, CGRectMake(0, 0, self.size.width,self.size.height), self.CGImage);
    break;
    }
    //And now we just create a new UIImage from the drawing context
    let cgimg = CGBitmapContextCreateImage(ctx)
    let img = UIImage(CGImage: cgimg!)
    return img;
    }

    (He sustituido todos los occurencies del parámetro image con self, porque mi código es una extensión en UIImage).


    EDICIÓN: Swift versión 3.

    El método devuelve un opcional, debido a que muchos de los intermedios de llamadas puede fallar y no me gusta usar !.

    func fixOrientation() -> UIImage? {
    guard let cgImage = self.cgImage else {
    return nil
    }
    if self.imageOrientation == UIImageOrientation.up {
    return self
    }
    let width  = self.size.width
    let height = self.size.height
    var transform = CGAffineTransform.identity
    switch self.imageOrientation {
    case .down, .downMirrored:
    transform = transform.translatedBy(x: width, y: height)
    transform = transform.rotated(by: CGFloat.pi)
    case .left, .leftMirrored:
    transform = transform.translatedBy(x: width, y: 0)
    transform = transform.rotated(by: 0.5*CGFloat.pi)
    case .right, .rightMirrored:
    transform = transform.translatedBy(x: 0, y: height)
    transform = transform.rotated(by: -0.5*CGFloat.pi)
    case .up, .upMirrored:
    break
    }
    switch self.imageOrientation {
    case .upMirrored, .downMirrored:
    transform = transform.translatedBy(x: width, y: 0)
    transform = transform.scaledBy(x: -1, y: 1)
    case .leftMirrored, .rightMirrored:
    transform = transform.translatedBy(x: height, y: 0)
    transform = transform.scaledBy(x: -1, y: 1)
    default:
    break;
    }
    //Now we draw the underlying CGImage into a new context, applying the transform
    //calculated above.
    guard let colorSpace = cgImage.colorSpace else {
    return nil
    }
    guard let context = CGContext(
    data: nil,
    width: Int(width),
    height: Int(height),
    bitsPerComponent: cgImage.bitsPerComponent,
    bytesPerRow: 0,
    space: colorSpace,
    bitmapInfo: UInt32(cgImage.bitmapInfo.rawValue)
    ) else {
    return nil
    }
    context.concatenate(transform);
    switch self.imageOrientation {
    case .left, .leftMirrored, .right, .rightMirrored:
    //Grr...
    context.draw(cgImage, in: CGRect(x: 0, y: 0, width: height, height: width))
    default:
    context.draw(cgImage, in: CGRect(x: 0, y: 0, width: width, height: height))
    }
    //And now we just create a new UIImage from the drawing context
    guard let newCGImg = context.makeImage() else {
    return nil
    }
    let img = UIImage(cgImage: newCGImg)
    return img;
    }

    (Nota: Swift versión 3 odas se compila en Xcode 8.1, pero no lo he probado realmente funciona. Podría tratarse de un error tipográfico en algún lugar, mezclados anchura/altura, etc. Siéntase libre de punto/corrección de errores).

    • He utilizado código anterior después de la conversión a swift 3.Comprobar mi respuesta si alguien necesita swift versión 3
    • Orientación de imagen no ha cambiado en absoluto. Lo siento, soy nuevo en el desarrollo de iOS. Lo que yo hice son, hago uso de la función a UIImage extensión, a continuación, establecer mediante programación en el interior de func viewDidLoad. Esta imagen es de samsung del teléfono photos.google.com/share/… y tiene 270 CW orientación en los datos exif. He aquí cómo yo lo uso let background: UIImage? = UIImage(named: "background_image")?.fixOrientation() backgroundImage.image = background
    • Alguien que entra problemas de pérdida de memoria que utiliza este @Nicolas? se parece a la CGImages no se desasigna. Mi aplicación es una masa de la aplicación de gestión de fotos y ofertas con muchas fotos. Esta función parece ser una fuga de memoria cada vez que se ejecuta. Hay soluciones rápidas para esto?
    • Hmm, havnen no mirado en detalle, pero la CoreGraphics las llamadas de trabajo con ARCO en swift.
    • He encontrado esta respuesta, que parece corroborar mi observación: stackoverflow.com/a/25790214/433373
    • Podría usted compartir más detalles de su pérdida de memoria? No he utilizado esta función a mí mismo en un tiempo, y ya no tengo acceso a la concreción del proyecto en el que he utilizado este código.

  4. 20

    Este método comprueba primero la orientación actual de UIImage y, a continuación, cambia la orientación de las agujas del reloj camino y volver UIImage.Usted puede mostrar esta imagen como

    auto.imageView.imagen = rotateImage(currentUIImage)

       func rotateImage(image:UIImage)->UIImage
    {
    var rotatedImage = UIImage();
    switch image.imageOrientation
    {
    case UIImageOrientation.Right:
    rotatedImage = UIImage(CGImage:image.CGImage!, scale: 1, orientation:UIImageOrientation.Down);
    case UIImageOrientation.Down:
    rotatedImage = UIImage(CGImage:image.CGImage!, scale: 1, orientation:UIImageOrientation.Left);
    case UIImageOrientation.Left:
    rotatedImage = UIImage(CGImage:image.CGImage!, scale: 1, orientation:UIImageOrientation.Up);
    default:
    rotatedImage = UIImage(CGImage:image.CGImage!, scale: 1, orientation:UIImageOrientation.Right);
    }
    return rotatedImage;
    }

    Swift version 4

    func rotateImage(image:UIImage) -> UIImage
    {
    var rotatedImage = UIImage()
    switch image.imageOrientation
    {
    case .right:
    rotatedImage = UIImage(cgImage: image.cgImage!, scale: 1.0, orientation: .down)
    case .down:
    rotatedImage = UIImage(cgImage: image.cgImage!, scale: 1.0, orientation: .left)
    case .left:
    rotatedImage = UIImage(cgImage: image.cgImage!, scale: 1.0, orientation: .up)
    default:
    rotatedImage = UIImage(cgImage: image.cgImage!, scale: 1.0, orientation: .right)
    }
    return rotatedImage
    }
    • Hola Varender, y gracias por ayudar en ESO. Podrías desarrollar un poco sobre cómo cree que esto podría ayudar a Martin? Cómo más elegante de rotación de datos es su solución?
    • 1. vamos a tomar el actual UIImage de la UIImageView 2.vamos a llamar a este método (rotateImage) y la superación de esta corriente UIImage como un argumento 3. almacenar el valor devuelto en UIImageView.imagen /* esto hará rotar los datos dentro de la imagen vista 🙂 🙂
    • sir según yo es la mejor respuesta, porque si vamos a girar toda la UIImageView, a continuación, el UIImageView X ser un valor negativo . Pero Si lo hacemos girar los datos a continuación, el UIImageView va a permanecer en el lugar y sólo los datos se pueden girar.Si usted toma un cuadrado UIImageView, simplemente puede transformar toda la UIImageView utilizando CGAffineTransformMakeRotate.
    • Esto debe ser aceptado respuesta! Trabajó como un encanto 🙂
    • en swift 3 : rotatedImage = UIImage(cgImage:imagen.cgImage!, escala: 1, orientación:UIImageOrientation.derecho)
    • Esto funcionará para la rotación de la vista de pantalla. Pero, si usted necesita, por ejemplo, subir su UIImage en algún lugar de usar Alamofire o lo que sea, no va a funcionar. Para carga, utilice @Aqua ‘s respuesta fixImageOrientation(_:)

  5. 15

    Swift 3.1

    func fixImageOrientation(_ image: UIImage)->UIImage {
    UIGraphicsBeginImageContext(image.size)
    image.draw(at: .zero)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage ?? image
    }
    • Esta es una solución perfecta 🙂
    • te mereces todos los bits de mi amigo
    • Este es el camino correcto
    • Soluciones agradables :), trabajo en swift 4
    • Este es mejor que el de que. Esto funciona en swift 4, pero eso no.
    • Gracias. Esto funciona si tienes que subir la imagen al servidor, no sólo mostrar como la mayoría de las otras respuestas.

  6. 8

    aquí es viable muestra de bacalao, teniendo en cuenta la orientación de la imagen:

    #define rad(angle) ((angle) / 180.0 * M_PI)
    - (CGAffineTransform)orientationTransformedRectOfImage:(UIImage *)img
    {
    CGAffineTransform rectTransform;
    switch (img.imageOrientation)
    {
    case UIImageOrientationLeft:
    rectTransform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(rad(90)), 0, -img.size.height);
    break;
    case UIImageOrientationRight:
    rectTransform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(rad(-90)), -img.size.width, 0);
    break;
    case UIImageOrientationDown:
    rectTransform = CGAffineTransformTranslate(CGAffineTransformMakeRotation(rad(-180)), -img.size.width, -img.size.height);
    break;
    default:
    rectTransform = CGAffineTransformIdentity;
    };
    return CGAffineTransformScale(rectTransform, img.scale, img.scale);
    }
    - (UIImage *)croppedImage:(UIImage*)orignialImage InRect:(CGRect)visibleRect{
    //transform visible rect to image orientation
    CGAffineTransform rectTransform = [self orientationTransformedRectOfImage:orignialImage];
    visibleRect = CGRectApplyAffineTransform(visibleRect, rectTransform);
    //crop image
    CGImageRef imageRef = CGImageCreateWithImageInRect([orignialImage CGImage], visibleRect);
    UIImage *result = [UIImage imageWithCGImage:imageRef scale:orignialImage.scale orientation:orignialImage.imageOrientation];
    CGImageRelease(imageRef);
    return result;
    }
  7. 7

    UIImage extensión en Swift. Usted no necesita hacer todo lo que voltear a todos, de verdad. Objective-C original está aquí, pero he añadido lo poco que respeta el alfa de la imagen original (crudamente, pero funciona para diferenciar opaco imágenes a partir de imágenes transparentes).

    //from https://github.com/mbcharbonneau/UIImage-Categories/blob/master/UIImage%2BAlpha.m
    //Returns true if the image has an alpha layer
    private func hasAlpha() -> Bool {
    guard let cg = self.cgImage else { return false }
    let alpha = cg.alphaInfo
    let retVal = (alpha == .first || alpha == .last || alpha == .premultipliedFirst || alpha == .premultipliedLast)
    return retVal
    }
    func normalizedImage() -> UIImage? {
    if self.imageOrientation == .up {
    return self
    }
    UIGraphicsBeginImageContextWithOptions(self.size, !self.hasAlpha(), self.scale)
    var rect = CGRect.zero
    rect.size = self.size
    self.draw(in: rect)
    let retVal = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return retVal
    }
  8. 6

    He convertido el código de @Nicolas Miari respuesta a Swift 3 en caso de que alguien necesite

    func fixOrientation() -> UIImage
    {
    if self.imageOrientation == UIImageOrientation.up {
    return self
    }
    var transform = CGAffineTransform.identity
    switch self.imageOrientation {
    case .down, .downMirrored:
    transform = transform.translatedBy(x: self.size.width, y: self.size.height)
    transform = transform.rotated(by: CGFloat(M_PI));
    case .left, .leftMirrored:
    transform = transform.translatedBy(x: self.size.width, y: 0);
    transform = transform.rotated(by: CGFloat(M_PI_2));
    case .right, .rightMirrored:
    transform = transform.translatedBy(x: 0, y: self.size.height);
    transform = transform.rotated(by: CGFloat(-M_PI_2));
    case .up, .upMirrored:
    break
    }
    switch self.imageOrientation {
    case .upMirrored, .downMirrored:
    transform = transform.translatedBy(x: self.size.width, y: 0)
    transform = transform.scaledBy(x: -1, y: 1)
    case .leftMirrored, .rightMirrored:
    transform = transform.translatedBy(x: self.size.height, y: 0)
    transform = transform.scaledBy(x: -1, y: 1);
    default:
    break;
    }
    //Now we draw the underlying CGImage into a new context, applying the transform
    //calculated above.
    let ctx = CGContext(
    data: nil,
    width: Int(self.size.width),
    height: Int(self.size.height),
    bitsPerComponent: self.cgImage!.bitsPerComponent,
    bytesPerRow: 0,
    space: self.cgImage!.colorSpace!,
    bitmapInfo: UInt32(self.cgImage!.bitmapInfo.rawValue)
    )
    ctx!.concatenate(transform);
    switch self.imageOrientation {
    case .left, .leftMirrored, .right, .rightMirrored:
    //Grr...
    ctx?.draw(self.cgImage!, in: CGRect(x:0 ,y: 0 ,width: self.size.height ,height:self.size.width))
    default:
    ctx?.draw(self.cgImage!, in: CGRect(x:0 ,y: 0 ,width: self.size.width ,height:self.size.height))
    break;
    }
    //And now we just create a new UIImage from the drawing context
    let cgimg = ctx!.makeImage()
    let img = UIImage(cgImage: cgimg!)
    return img;
    }
    • Después de la captura de la imagen en los métodos de Delegado imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any] let imageCaptured:UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage imagen es siempre rightOrientation y este método es la devolución de la imagen 🙁
    • Sí orientación de imagen es todos los días .a la derecha, pero se muestra correctamente en UIImageView. Apple tiene algunos datos interna que se utiliza aquí para mostrar corrrectly
  9. 3

    Gracias a Waseem05 para su rápido 3 de la traducción, pero su método sólo funcionó para mí cuando me envolvió dentro de una extensión para UIImage y lo colocó fuera de/debajo de la de los padres de la clase así:

    extension UIImage {
    func fixOrientation() -> UIImage
    {
    if self.imageOrientation == UIImageOrientation.up {
    return self
    }
    var transform = CGAffineTransform.identity
    switch self.imageOrientation {
    case .down, .downMirrored:
    transform = transform.translatedBy(x: self.size.width, y: self.size.height)
    transform = transform.rotated(by: CGFloat(M_PI));
    case .left, .leftMirrored:
    transform = transform.translatedBy(x: self.size.width, y: 0);
    transform = transform.rotated(by: CGFloat(M_PI_2));
    case .right, .rightMirrored:
    transform = transform.translatedBy(x: 0, y: self.size.height);
    transform = transform.rotated(by: CGFloat(-M_PI_2));
    case .up, .upMirrored:
    break
    }
    switch self.imageOrientation {
    case .upMirrored, .downMirrored:
    transform = transform.translatedBy(x: self.size.width, y: 0)
    transform = transform.scaledBy(x: -1, y: 1)
    case .leftMirrored, .rightMirrored:
    transform = transform.translatedBy(x: self.size.height, y: 0)
    transform = transform.scaledBy(x: -1, y: 1);
    default:
    break;
    }
    //Now we draw the underlying CGImage into a new context, applying the transform
    //calculated above.
    let ctx = CGContext(
    data: nil,
    width: Int(self.size.width),
    height: Int(self.size.height),
    bitsPerComponent: self.cgImage!.bitsPerComponent,
    bytesPerRow: 0,
    space: self.cgImage!.colorSpace!,
    bitmapInfo: UInt32(self.cgImage!.bitmapInfo.rawValue)
    )
    ctx!.concatenate(transform);
    switch self.imageOrientation {
    case .left, .leftMirrored, .right, .rightMirrored:
    //Grr...
    ctx?.draw(self.cgImage!, in: CGRect(x:0 ,y: 0 ,width: self.size.height ,height:self.size.width))
    default:
    ctx?.draw(self.cgImage!, in: CGRect(x:0 ,y: 0 ,width: self.size.width ,height:self.size.height))
    break;
    }
    //And now we just create a new UIImage from the drawing context
    let cgimg = ctx!.makeImage()
    let img = UIImage(cgImage: cgimg!)
    return img;
    }
    }

    Luego llamó con:

    let correctedImage:UIImage = wonkyImage.fixOrientation()

    Y todo estaba bien! Apple debería hacer más fácil para descartar la orientación cuando no lo necesitamos frontal/posterior de la cámara y arriba/abajo/izquierda/derecha de la orientación del dispositivo de metadatos.

  10. 2

    Si usted necesita para girar y fijar la orientación de la imagen de abajo extensión sería útil.

    extension UIImage {
    public func imageRotatedByDegrees(degrees: CGFloat) -> UIImage {
    //Calculate the size of the rotated view's containing box for our drawing space
    let rotatedViewBox: UIView = UIView(frame: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))
    let t: CGAffineTransform = CGAffineTransform(rotationAngle: degrees * CGFloat.pi / 180)
    rotatedViewBox.transform = t
    let rotatedSize: CGSize = rotatedViewBox.frame.size
    //Create the bitmap context
    UIGraphicsBeginImageContext(rotatedSize)
    let bitmap: CGContext = UIGraphicsGetCurrentContext()!
    //Move the origin to the middle of the image so we will rotate and scale around the center.
    bitmap.translateBy(x: rotatedSize.width / 2, y: rotatedSize.height / 2)
    //Rotate the image context
    bitmap.rotate(by: (degrees * CGFloat.pi / 180))
    //Now, draw the rotated/scaled image into the context
    bitmap.scaleBy(x: 1.0, y: -1.0)
    bitmap.draw(self.cgImage!, in: CGRect(x: -self.size.width / 2, y: -self.size.height / 2, width: self.size.width, height: self.size.height))
    let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
    UIGraphicsEndImageContext()
    return newImage
    }
    public func fixedOrientation() -> UIImage {
    if imageOrientation == UIImageOrientation.up {
    return self
    }
    var transform: CGAffineTransform = CGAffineTransform.identity
    switch imageOrientation {
    case UIImageOrientation.down, UIImageOrientation.downMirrored:
    transform = transform.translatedBy(x: size.width, y: size.height)
    transform = transform.rotated(by: CGFloat.pi)
    break
    case UIImageOrientation.left, UIImageOrientation.leftMirrored:
    transform = transform.translatedBy(x: size.width, y: 0)
    transform = transform.rotated(by: CGFloat.pi/2)
    break
    case UIImageOrientation.right, UIImageOrientation.rightMirrored:
    transform = transform.translatedBy(x: 0, y: size.height)
    transform = transform.rotated(by: -CGFloat.pi/2)
    break
    case UIImageOrientation.up, UIImageOrientation.upMirrored:
    break
    }
    switch imageOrientation {
    case UIImageOrientation.upMirrored, UIImageOrientation.downMirrored:
    transform.translatedBy(x: size.width, y: 0)
    transform.scaledBy(x: -1, y: 1)
    break
    case UIImageOrientation.leftMirrored, UIImageOrientation.rightMirrored:
    transform.translatedBy(x: size.height, y: 0)
    transform.scaledBy(x: -1, y: 1)
    case UIImageOrientation.up, UIImageOrientation.down, UIImageOrientation.left, UIImageOrientation.right:
    break
    }
    let ctx: CGContext = CGContext(data: nil,
    width: Int(size.width),
    height: Int(size.height),
    bitsPerComponent: self.cgImage!.bitsPerComponent,
    bytesPerRow: 0,
    space: self.cgImage!.colorSpace!,
    bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue)!
    ctx.concatenate(transform)
    switch imageOrientation {
    case UIImageOrientation.left, UIImageOrientation.leftMirrored, UIImageOrientation.right, UIImageOrientation.rightMirrored:
    ctx.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.height, height: size.width))
    default:
    ctx.draw(self.cgImage!, in: CGRect(x: 0, y: 0, width: size.width, height: size.height))
    break
    }
    let cgImage: CGImage = ctx.makeImage()!
    return UIImage(cgImage: cgImage)
    }

    }

  11. 1

    Swift versión 3.0 de Tommy respuesta

    let imageToDisplay = UIImage.init(cgImage: originalImage.cgImage!, scale: originalImage.scale, orientation: UIImageOrientation.up)
  12. 1
    extension UIImage {
    func fixImageOrientation() -> UIImage {
    UIGraphicsBeginImageContext(self.size)
    self.draw(at: .zero)
    let newImage = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()
    return newImage ?? self
    }
    }
    1. Crear la extensión como top ejemplo.
    2. Llaman: imageView.image?.fixImageOrientation() o UIImage(named: "someImage").fixImageOrientation()

    3. Buena suerte a todos!

    • Esto funcionó para mí como un encanto!
    • Esto funciona bien. Pero la memoria es la construcción gusta nada y la aplicación se bloquea si esto es llamado en bucles.
    • Yo no comprobar en bucle, pero 100% existe una manera de aplicar.
  13. 0

    Inspirado en @Aqua Respuesta…..

    en Objective C

    - (UIImage *)fixImageOrientation:(UIImage *)img {
    UIGraphicsBeginImageContext(img.size);
    [img drawAtPoint:CGPointZero];
    UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    if (newImg) {
    return newImg;
    }
    return img;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here