extension UIImage { func rotate(aImage:UIImage) -> UIImage { // 向上 直接返回 if aImage.imageOrientation == .up { return aImage } // 向下M_PI 向左M_PI_2 向右-M_PI_2 var transform: CGAffineTransform = CGAffineTransform.identity switch aImage.imageOrientation { case .down,.downMirrored: transform = transform.translatedBy(x: aImage.size.width,y: aImage.size.height) transform = transform.rotated(by: CGFloat(M_PI)) case .left,.leftMirrored: transform = transform.translatedBy(x: aImage.size.width,y: 0) transform = transform.rotated(by: CGFloat(M_PI_2)) case .right,.rightMirrored: transform = transform.translatedBy(x: 0,y: aImage.size.height) transform = transform.rotated(by: CGFloat(-M_PI_2)) default: break } switch aImage.imageOrientation { case .upMirrored,y: 0) transform = transform.scaledBy(x: -1,y: 1) case .leftMirrored,.rightMirrored: transform = transform.translatedBy(x: aImage.size.height,y: 1) default: break } //渲染 let ctx: CGContext = CGContext(data: nil,width: Int(aImage.size.width),height: Int(aImage.size.height),bitsPerComponent: aImage.cgImage!.bitsPerComponent,bytesPerRow: 0,space: aImage.cgImage!.colorSpace!,bitmapInfo: aImage.cgImage!.bitmapInfo.rawValue)! ctx.concatenate(transform) switch aImage.imageOrientation { case .left,.leftMirrored,.right,.rightMirrored: ctx.draw(aImage.cgImage!,in: CGRect(x: 0,y: 0,width: aImage.size.height,height: aImage.size.width)) default: ctx.draw(aImage.cgImage!,width: aImage.size.width,height: aImage.size.height)) } // 新的图片 let cgimg: CGImage = ctx.makeImage()! let img: UIImage = UIImage(cgImage: cgimg) return img } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。