我正在学习如何使用 UIImagePickerController
并陷入了一个问题,使用 UIImagePickerController.sourceType = .camera
.
我的应用应该做的是。
UIImage.pngData(_:)
当我这样做的时候(按照Swift书中的示例项目进行App开发),图像出现的是 旋转90度 出于某种原因,我想知道。
我试图创建额外的UIImageView并设置它的图像属性。之前 将UIImage转换为pngData,然后正常出现(见第二张截图)。
从照片库中选择照片时,在任何情况下都不会出现问题(转换前-转换后)。
所以我想,pngData是以某种方式丢失了照片方向信息?或者是我在别的地方乱了阵脚,也许。
下面是我的应用的截图,你可以看到原始拍摄的照片的样子,以及它在应用中的样子(上面的标签--UIButton,下面--测试UIImageView)。无关文字:)
如果你保存 UIImage
作为 JPEG
,这将设置旋转 flag
.
PNGs
不支持轮换 flag
所以,如果你保存了一个 UIImage
作为 PNG
,它将会被错误地旋转,而不会有一个 flag
设来解决。所以如果你想 PNGs
你必须自己旋转它们。
let jpgData = downloadedImage.jpegData(compressionQuality: 1)
要获得旋转的图像,你需要绘制......你可以使用以下扩展功能
extension UIImage {
func rotateImage()-> UIImage? {
if (self.imageOrientation == UIImage.Orientation.up ) {
return self
}
UIGraphicsBeginImageContext(self.size)
self.draw(in: CGRect(origin: CGPoint.zero, size: self.size))
let copy = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return copy
}
}
如何使用
let rotatedImage = downloadedImage.rotateImage()