web-dev-qa-db-fra.com

Problèmes avec le recadrage d'un UIImage dans Swift

J'écris une application qui prend une image et recadre tout sauf un rectangle au centre de l'image. (Swift) Je ne peux cependant pas faire fonctionner la fonction de recadrage. Voici ce que j'ai maintenant:

func cropImageToBars(image: UIImage) -> UIImage {
     let crop = CGRectMake(0, 200, image.size.width, 50)

     let cgImage = CGImageCreateWithImageInRect(image.CGImage, crop)
     let result: UIImage = UIImage(CGImage: cgImage!, scale: 0, orientation: image.imageOrientation)

     UIImageWriteToSavedPhotosAlbum(result, self, nil, nil)

     return result
  }

J'ai regardé beaucoup de guides différents mais aucun ne semble fonctionner pour moi. Parfois, l'image pivote de 90 degrés, je ne sais pas pourquoi elle fait ça.

13
mawnch

Si vous souhaitez utiliser une extension, ajoutez-la simplement au fichier, au début ou à la fin. Vous pouvez créer un fichier supplémentaire pour ce code.

Swift 3.

extension UIImage {
    func crop( rect: CGRect) -> UIImage {
        var rect = rect
        rect.Origin.x*=self.scale
        rect.Origin.y*=self.scale
        rect.size.width*=self.scale
        rect.size.height*=self.scale

        let imageRef = self.cgImage!.cropping(to: rect)
        let image = UIImage(cgImage: imageRef!, scale: self.scale, orientation: self.imageOrientation)
        return image
    }
}


let myImage = UIImage(named: "Name")
myImage?.crop(rect: CGRect(x: 0, y: 0, width: 50, height: 50))

pour recadrer une partie centrale d'une image:

let imageWidth = 100.0
let imageHeight = 100.0
let width = 50.0
let height = 50.0
let Origin = CGPoint(x: (imageWidth - width)/2, y: (imageHeight - height)/2)
let size = CGSize(width: width, height: height)

myImage?.crop(rect: CGRect(Origin: Origin, size: size))
25
pedrouan