es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo detectar la orientación de una imagen obtenida con SwiftUI 3 AsyncImage()

Obtengo una imagen con AsyncImage() para mostrarla en una vista.

struct Pic: View {
  var body: some View {
    let url = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("IMG_5328.jpeg")

    AsyncImage(url: url) { image in
      image
      .resizable()
      //     if(image.orientation == .right) {
      //       .rotationEffect(.degrees(90))
      //     }
      .scaledToFit()
    } placeholder: {
      Color.red
    }
  }
}

El archivo de imagen (IMG_5328.jpeg) tiene una orientación de 6 (90 grados en sentido antihorario), pero la imagen no se muestra con rotación automática.
¿Cómo puedo obtener la orientación para rotarla manualmente?

Trabajando con UIImage, esto se hace automáticamente.

let url = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("IMG_5328.jpeg")
let imageData = try! Data(contentsOf: url!)
let uiImage = UIImage(data: imageData)!
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para girar manualmente la imagen basándose en su orientación, puedes usar el modificador rotationEffect y calcular el grado de rotación necesario según la orientación de la imagen. Reemplaza el código comentado en el cierre de AsyncImage con el siguiente código:

    .rotationEffect(.degrees(Double(uiImage.imageOrientation.rawValue) * 90))
    

    Este código calcula el grado de rotación necesario según la propiedad imageOrientation del objeto UIImage, que va de 0 a 3 para las diferentes rotaciones en sentido horario y de 4 a 7 para las diferentes rotaciones en sentido antihorario.

    Ten en cuenta que primero tendrás que convertir el objeto Data obtenido del archivo de imagen a un objeto UIImage, como se muestra en el segundo fragmento de código proporcionado en la pregunta.

Comments are closed.