我正在学习如何使用UIIImagePickerController
,但在使用UIIImagePickerController.sourceType=.camer
时遇到了一个问题。
我的应用程序应该做的是:
uiimage.pngdata(_:)
当我这样做的时候(跟随Swift Book的示例项目的应用程序开发),图像似乎因为某种原因被旋转了90度,我想知道这一点。
在将UIImage转换为pngData之前,我已经尝试创建了额外的UImageView并设置了它的image属性,它正常出现了(参见第二个屏幕截图)。
从照片库中选择照片时,在任何情况下(转换前-转换后)都不会出现问题。
所以我想,pngData在某种程度上丢失了照片方位信息? 或者我在别的地方搞砸了。
这里是我的应用程序的截图,所以你可以看到原始照片的样子,以及它在应用程序中的样子(上面是标签-UIButton,下面是测试UImageView)。 别介意文本:)
如果将UIimage
保存为JPEG
,这将设置旋转标志
。
PNGS
不支持旋转标志
,因此如果将UIimage
保存为PNG
,它将被错误旋转,并且没有设置标志
来修复它。 因此,如果您想要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()