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)!
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 deAsyncImage
con el siguiente código:Este código calcula el grado de rotación necesario según la propiedad
imageOrientation
del objetoUIImage
, 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 objetoUIImage
, como se muestra en el segundo fragmento de código proporcionado en la pregunta.