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)
}