创建一个UIImage可以使用以下方法:
1
| - initWithCGImage:scale:orientation:
|
这个方法看起来可以对图片进行旋转,但是这个方法实际上是创建一个传入的CGImage的拷贝,并且把CGImage的imageFlags属性里的imageOrientation改变了.所以对一些无视这个flag的类,例如UIActivityViewController
,使用这个方法将得不到正确的效果.处理后的图片在使用某些软件加载的时候也会没有效果.
所以,下面介绍一个从像素上旋转图片的方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| func rotateImage(oldImage : UIImage ,byDegree degree: Double) -> UIImage{ let rotatedViewBox = UIView(frame: CGRectMake(0,0,oldImage.size.height,oldImage.size.width)) let t : CGAffineTransform = CGAffineTransformMakeRotation(CGFloat(degree * M_PI / 180.0)) rotatedViewBox.transform = t let rotatedSize = rotatedViewBox.frame.size UIGraphicsBeginImageContext(rotatedSize) let bitmap = UIGraphicsGetCurrentContext() CGContextTranslateCTM(bitmap, rotatedSize.width/2, rotatedSize.height/2) CGContextRotateCTM(bitmap, CGFloat(degree * M_PI / 180.0)) CGContextDrawImage(bitmap, CGRectMake(-oldImage.ssize.height/2, -oldImage.size.width/2, oldImage.size.height, oldImage.size.width), oldImage.CGImage) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage }
|