ios swift uiimage png uiimagepickercontroller

ios - La imagen PNG rápida se guarda con una orientación incorrecta



swift uiimage (1)

Si uso la imagen antes de guardarla, es normal. Pero si lo guardo y lo uso más tarde es 90 grados girado. ¿Cómo puedo asegurarme de que no se guarde de lado?

func saveEvent(_ center1: CLLocation, title2: String, imagePicked1: UIImage) { let data = UIImagePNGRepresentation(imagePicked1);/// let url = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(NSUUID().uuidString+".dat") do { try data!.write(to: url!, options: []) } catch let e as NSError { print("Error! /(e)"); return } let image11 = CKAsset(fileURL: url!) self.eventRecord.setObject(image11 as CKAsset, forKey: "Picture") let publicData = CKContainer.default().publicCloudDatabase publicData.save(self.eventRecord, completionHandler: { record, error in if error == nil { print("Image saved") }else{ print(error!) } }) }


Si necesita guardar su PNG con la rotación correcta, deberá volver a dibujar su imagen si su orientación no es .up . Puede volver a dibujarlo de la siguiente manera:

extension UIImage { var png: Data? { guard let flattened = flattened else { return nil } return flattened.pngData() // Swift 4.2 or later // return UIImagePNGRepresentation(flattened) // Swift 4.1 or earlier } var flattened: UIImage? { if imageOrientation == .up { return self } UIGraphicsBeginImageContextWithOptions(size, false, scale) defer { UIGraphicsEndImageContext() } draw(in: CGRect(origin: .zero, size: size)) return UIGraphicsGetImageFromCurrentImageContext() } }

editar / actualizar:

Para iOS10 + tvOS10 + puede usar UIGraphicsImageRenderer :

extension UIImage { var png: Data? { return flattened.pngData() } var flattened: UIImage { if imageOrientation == .up { return self } return UIGraphicsImageRenderer(size: size, format: imageRendererFormat).image { _ in draw(at: .zero) } } }

let image = UIImage(data: try! Data(contentsOf: URL(string: "https://i.stack.imgur.com/varL9.jpg")!))! if let data = image.png { let imageFromPNGData = UIImage(data: data) }