Swift PNG 图像以不正确的方向保存 [英] Swift PNG Image being saved with incorrect orientation
本文介绍了Swift PNG 图像以不正确的方向保存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我在保存图像之前使用它是正常的.但是如果我保存它并稍后使用它,它会旋转 90 度.我怎样才能确保它不会横向保存?
If I use the image before it is saved it is normal. But if I save it and use it later is is 90 degrees turned. How can I make sure it doesn't save sideways?
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!)
}
})
}
推荐答案
如果您需要以正确的旋转方式保存 PNG,您将需要重绘图像,如果其方向不是 .up
.您可以按如下方式重绘:
If you need to save your PNG with correct rotation you will need to redraw your image if its orientation it is not .up
. You can redraw it as follow:
extension UIImage {
func png(isOpaque: Bool = true) -> Data? { flattened(isOpaque: isOpaque)?.pngData() }
func flattened(isOpaque: Bool = true) -> UIImage? {
if imageOrientation == .up { return self }
UIGraphicsBeginImageContextWithOptions(size, isOpaque, scale)
defer { UIGraphicsEndImageContext() }
draw(in: CGRect(origin: .zero, size: size))
return UIGraphicsGetImageFromCurrentImageContext()
}
}
编辑/更新:
对于 iOS10+ tvOS10+ 你可以使用 UIGraphicsImageRenderer
:
For iOS10+ tvOS10+ you can use UIGraphicsImageRenderer
:
extension UIImage {
func png(isOpaque: Bool = true) -> Data? { flattened(isOpaque: isOpaque).pngData() }
func flattened(isOpaque: Bool = true) -> UIImage {
if imageOrientation == .up { return self }
let format = imageRendererFormat
format.opaque = isOpaque
return UIGraphicsImageRenderer(size: size, format: format).image { _ in draw(at: .zero) }
}
}
<小时>
游乐场测试:
Playground testing:
用于不透明的图像:
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)
}
<小时>
透明:
if let data = image.png(isOpaque: false) {
let imageFromPNGData = UIImage(data: data)
}
这篇关于Swift PNG 图像以不正确的方向保存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文