如何使用Swift水平翻转UIImage?

Lim*_*ean 32 flip uiimage ios swift

进行UIImage翻转的解决方案是使用Objective-C代码:

[UIImage imageWithCGImage:img.CGImage scale:1.0 orientation: UIImageOrientationDownMirrored]
Run Code Online (Sandbox Code Playgroud)

但是,在Swift中没有imageWithCGImage!是否有使用Swift水平翻转图像的解决方案?谢谢!

dre*_*wag 28

大多数工厂方法都在swift中转换为初始化程序.只要可用,即使类方法仍然可用,它们也是首选.您可以使用:

    init(CGImage cgImage: CGImage!, scale: CGFloat, orientation: UIImageOrientation)
Run Code Online (Sandbox Code Playgroud)

用法如下所示:

var image = UIImage(CGImage: img.CGImage, scale: 1.0, orientation: .DownMirrored)
Run Code Online (Sandbox Code Playgroud)

  • 试过这个,它似乎没有翻转图像.渲染时有没有办法尊重方向?`public extension UIImage {var flippedHorizo​​ntally:UIImage {return UIImage(CGImage:self.CGImage!,scale:self.scale,orientation:.UpMirrored)}} (11认同)

duy*_*yen 26

在斯威夫特....(6.3.1)

YourUIImage.transform = CGAffineTransformMakeScale(-1, 1)
Run Code Online (Sandbox Code Playgroud)

这也适用于UIView

  • 这不是为了翻转`UIImage`,而是为了翻转`UIImageView`. (42认同)
  • 它不是翻转 UIImage。但它解决了我的用户界面问题。 (2认同)

Ale*_*bin 18

在所有情况下,更改图像方向参数实际上并不会翻转图像.必须以某种方式重绘图像...例如:

斯威夫特3

func flipImageLeftRight(_ image: UIImage) -> UIImage? {

    UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
    let context = UIGraphicsGetCurrentContext()!
    context.translateBy(x: image.size.width, y: image.size.height)
    context.scaleBy(x: -image.scale, y: -image.scale)

    context.draw(image.cgImage!, in: CGRect(origin:CGPoint.zero, size: image.size))

    let newImage = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    return newImage
}
Run Code Online (Sandbox Code Playgroud)


Fra*_*.M. 14

对我来说最简单的方法是使用如下的.withHorizontallyFlippedOrientation()实例方法UIImage:

let flippedImage = straightImage.withHorizontallyFlippedOrientation()

简单的单行总是让我开心:)

  • #available(iOS 10.0,*) (3认同)
  • 很棒,但不尊重从 AVFoundation 捕获的图像的垂直方向 - 将图像上下翻转 (2认同)

Alf*_*lfi 7

斯威夫特4

YOURIMAGEVIEW.transform = CGAffineTransform(scaleX: -1, y: 1)
Run Code Online (Sandbox Code Playgroud)

  • 问题是关于UIImage,而不是UIImageView (7认同)
  • 这不是正确的答案,但在其他情况下它对我有用,谢谢 (2认同)

Jos*_*eld 7

Swift 5 解决方案

这是实际翻转图像的最简单解决方案

extension UIImage {
    func flipHorizontally() -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale)
        let context = UIGraphicsGetCurrentContext()!
        
        context.translateBy(x: self.size.width/2, y: self.size.height/2)
        context.scaleBy(x: -1.0, y: 1.0)
        context.translateBy(x: -self.size.width/2, y: -self.size.height/2)
        
        self.draw(in: CGRect(x: 0, y: 0, width: self.size.width, height: self.size.height))
        
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return newImage
    }
}
Run Code Online (Sandbox Code Playgroud)

要使用此解决方案,您可以执行以下操作

let image = UIImage(named: "image.png")!
let newImage = image.flipHorizontally()
Run Code Online (Sandbox Code Playgroud)