2016-09-03 1 views
8

J'écris une application qui prend une image et recadre tout sauf un rectangle au centre de l'image. (SWIFT) Je n'arrive pas à faire fonctionner la fonction de recadrage. Voilà ce que j'ai maintenant:Problèmes avec le recadrage d'un UIImage dans Swift

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 différents guides, mais aucun d'entre eux ne semble fonctionner pour moi. Parfois, l'image est tournée de 90 degrés, je ne sais pas pourquoi cela fait ça.

+0

Bienvenue sur le débordement de pile. Avant votre question, veuillez vérifier ce qui est utile sur ce site. http://stackoverflow.com/questions/158914/cropping-an-uiimage/29294333#29294333 – pedrouan

+0

Cela ressemble à une question similaire, mais j'ai un problème avec Swift, pas Objective-C. – mawnch

+0

Et il existe également de nombreuses solutions pour swift. Cela semble le meilleur: http://stackoverflow.com/a/30403863/661022 – pedrouan

Répondre

15

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 un tel code.

Swift 3,0

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 la récolte d'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)) 
+0

J'ai posté l'exemple dans le dernier Swift 3.0. Dans le cas où vous travaillez dans l'ancienne version, copier coller nécessitera quelques corrections. – pedrouan

+0

Le recadrage semble fonctionner mais je n'arrive pas à recadrer la partie de l'image que je veux réellement. Par exemple, les arguments (50,50, 500, 500) renvoie une partie de l'image en haut à droite de l'écran, ce qui n'a aucun sens pour moi. Si je veux un rectangle au milieu de l'écran (sorte de http://imgur.com/a/vOMsb), quel devrait être le rectangle? – mawnch

+0

@KaviRamamurthy J'ai mis à jour ma réponse. – pedrouan