diff --git a/damus/Views/ImagePicker.swift b/damus/Views/ImagePicker.swift index 2829815d..366d8966 100644 --- a/damus/Views/ImagePicker.swift +++ b/damus/Views/ImagePicker.swift @@ -45,11 +45,13 @@ struct ImagePicker: UIViewControllerRepresentable { // Handle the selected image onImagePicked(imageURL) } else if let cameraImage = info[UIImagePickerController.InfoKey.originalImage] as? UIImage { - if let imageURL = saveImageToTemporaryFolder(image: cameraImage, imageType: "jpeg") { + let orientedImage = cameraImage.fixOrientation() + if let imageURL = saveImageToTemporaryFolder(image: orientedImage, imageType: "jpeg") { onImagePicked(imageURL) } } else if let editedImage = info[UIImagePickerController.InfoKey.editedImage] as? UIImage { - if let editedImageURL = saveImageToTemporaryFolder(image: editedImage) { + let orientedImage = editedImage.fixOrientation() + if let editedImageURL = saveImageToTemporaryFolder(image: orientedImage, imageType: "jpeg") { onImagePicked(editedImageURL) } } @@ -118,3 +120,16 @@ struct ImagePicker: UIViewControllerRepresentable { } } + +extension UIImage { + func fixOrientation() -> UIImage { + guard imageOrientation != .up else { return self } + + UIGraphicsBeginImageContextWithOptions(size, false, scale) + draw(in: CGRect(origin: .zero, size: size)) + let normalizedImage = UIGraphicsGetImageFromCurrentImageContext() + UIGraphicsEndImageContext() + + return normalizedImage ?? self + } +}