Swift で UIImage を回転する 質問する

Swift で UIImage を回転する 質問する

私は Swift で Xcode 6.0.1 を使用しています。UIImage があり、古い画像をソースとして使用して別の画像を作成し、新しい画像を何らかの方法で回転させて、たとえば垂直に反転させたいと思います。

この質問はすでに回答されています数か月前しかし、状況は同じであるにもかかわらず、その解決策は私には機能しません。

私が

var image = UIImage(CGImage: otherImage.CGImage, scale: 1.0, orientation: .DownMirrored)

Xcode は、「呼び出しに余分な引数 'scale' がある」と警告します。Apple のドキュメントで確認したところ、このバージョンの初期化子はこれら 3 つの引数を取るため、これは意味がありません。スケールと方向の引数を省略すると問題は解決しますが、回転を実行できなくなります。

これに関して私が見つけた唯一の参考文献はこの男同じ問題を抱えていた。

どう思いますか?

これをこのバージョンの Xcode で実行する必要があるので、回転を実行する別の方法があれば (まだ見つけていません) 便利です。

ベストアンサー1

Swift 5 ソリューション

私が書いたピクセルSDKこれはこの問題に対するより強力な解決策を提供しますが、そうでなければ最も簡単な解決策は次のとおりです。

extension UIImage {
    func rotate(radians: Float) -> UIImage? {
        var newSize = CGRect(origin: CGPoint.zero, size: self.size).applying(CGAffineTransform(rotationAngle: CGFloat(radians))).size
        // Trim off the extremely small float value to prevent core graphics from rounding it up
        newSize.width = floor(newSize.width)
        newSize.height = floor(newSize.height)
        
        UIGraphicsBeginImageContextWithOptions(newSize, false, self.scale)
        guard let context = UIGraphicsGetCurrentContext() else { return nil }
        
        // Move origin to middle
        context.translateBy(x: newSize.width/2, y: newSize.height/2)
        // Rotate around middle
        context.rotate(by: CGFloat(radians))
        // Draw the image at its center
        self.draw(in: CGRect(x: -self.size.width/2, y: -self.size.height/2, width: self.size.width, height: self.size.height))
    
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return newImage
    }
}

このソリューションを使用するには、次の操作を実行します。

let image = UIImage(named: "image.png")!
let newImage = image.rotate(radians: .pi/2) // Rotate 90 degrees

おすすめ記事