如何在Swift中旋转图像?

我无法快速将图像旋转90度。我已经写了下面的代码,但是有一个错误并且无法编译

  func imageRotatedByDegrees(oldImage: UIImage, deg degrees: CGFloat) -> UIImage {

//Calculate the size of the rotated view's containing box for our drawing space

let rotatedViewBox: UIView = UIView(frame: CGRect(x: 0, y: 0, width: oldImage.size.width, height: oldImage.size.height))

let t: CGAffineTransform = CGAffineTransform(rotationAngle: degrees * CGFloat(M_PI / 180))

rotatedViewBox.transform = t

let rotatedSize: CGSize = rotatedViewBox.frame.size

//Create the bitmap context

UIGraphicsBeginImageContext(rotatedSize)

let bitmap: CGContext = UIGraphicsGetCurrentContext()!

//Move the origin to the middle of the image so we will rotate and scale around the center.

bitmap.translateBy(x: rotatedSize.width / 2, y: rotatedSize.height / 2)

//Rotate the image context

bitmap.rotate(by: (degrees * CGFloat(M_PI / 180)))

//Now, draw the rotated/scaled image into the context

bitmap.scaleBy(x: 1.0, y: -1.0)

bitmap.draw(oldImage, in: CGRect(origin: (x: -oldImage.size.width / 2, y: -oldImage.size.height / 2, width: oldImage.size.width, height: oldImage.size.height), size: oldImage.cgImage))

let newImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!

UIGraphicsEndImageContext()

return newImage

}

以下是我不确定的代码

bitmap.draw(oldImage, in:  CGRect(origin: (x: -oldImage.size.width / 2,  y: -oldImage.size.height / 2, width:  oldImage.size.width, height: oldImage.size.height), size: oldImage.cgImage))

回答:

这是UIImage针对

的扩展,可以仅旋转图像而无需UIImageView。成功测试了图像已旋转,不仅更改了exif数据。

import UIKit

extension UIImage {

func rotate(radians: CGFloat) -> UIImage {

let rotatedSize = CGRect(origin: .zero, size: size)

.applying(CGAffineTransform(rotationAngle: CGFloat(radians)))

.integral.size

UIGraphicsBeginImageContext(rotatedSize)

if let context = UIGraphicsGetCurrentContext() {

let origin = CGPoint(x: rotatedSize.width / 2.0,

y: rotatedSize.height / 2.0)

context.translateBy(x: origin.x, y: origin.y)

context.rotate(by: radians)

draw(in: CGRect(x: -origin.y, y: -origin.x,

width: size.width, height: size.height))

let rotatedImage = UIGraphicsGetImageFromCurrentImageContext()

UIGraphicsEndImageContext()

return rotatedImage ?? self

}

return self

}

}

要执行180度旋转,您可以这样命名:

let rotatedImage = image.rotate(radians: .pi)

如果由于某种原因无法旋转,则将返回原始图像。

以上是 如何在Swift中旋转图像? 的全部内容, 来源链接: utcz.com/qa/422633.html

回到顶部