web-dev-qa-db-fra.com

Comment retourner UIImage horizontalement avec Swift?

La solution pour faire un retournement UIImage est avec le code Objective-C:

[UIImage imageWithCGImage:img.CGImage scale:1.0 orientation: UIImageOrientationDownMirrored]

Cependant, imageWithCGImage n'est pas disponible dans Swift! Existe-t-il une solution pour retourner l'image horizontalement avec Swift? Merci!

29
Lim Thye Chean

La plupart des méthodes d'usine sont converties en initialiseurs dans Swift. Chaque fois qu'elles sont disponibles, même si la méthode de classe est toujours disponible, elles sont préférées. Vous pouvez utiliser:

    init(CGImage cgImage: CGImage!, scale: CGFloat, orientation: UIImageOrientation)

L'utilisation ressemblerait à ceci:

var image = UIImage(CGImage: img.CGImage, scale: 1.0, orientation: .DownMirrored)
27
drewag

Dans Swift .... (6.3.1)

YourUIImage.transform = CGAffineTransformMakeScale(-1, 1)

Cela fonctionne également avec un UIView

25
duyn9uyen

La modification du paramètre d'orientation de l'image ne retourne pas réellement l'image dans tous les cas. L'image doit être redessinée d'une manière ou d'une autre ... Par exemple, comme ceci:

Swift

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
}
17
Alex Shubin

Pour moi, le moyen le plus simple était d'utiliser la méthode d'instance .withHorizontallyFlippedOrientation() de UIImage comme suit:

let flippedImage = straightImage.withHorizontallyFlippedOrientation()

Les simples lignes simples me font toujours plaisir :)

12
Francesco D.M.

Swift 4

YOURIMAGEVIEW.transform = CGAffineTransform(scaleX: -1, y: 1)
6
Alfi