2016-09-03 37 views
8

Piszę aplikację, która pobiera obraz i wycina wszystko poza prostokątem na środku obrazu. (SWIFT) Nie mogę jednak uruchomić funkcji przycinania. Oto, co mam teraz:Problemy z przycinaniem UIImage w 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 
    } 

Spojrzałem na wielu różnych przewodników, ale żaden z nich nie działa dla mnie. Czasami obraz jest obracany o 90 stopni, nie mam pojęcia, dlaczego tak się dzieje.

+0

Witamy na przepełnienie stosu. Przed pytaniem sprawdź, co jest przydatne w tej witrynie. http://stackoverflow.com/questions/158914/cropping-an-uiimage/29294333#29294333 – pedrouan

+0

Wygląda na podobne pytanie, ale mam problem z Swift, a nie z Objective-C. – mawnch

+0

Istnieje również wiele rozwiązań dla szybkich. To wygląda najlepiej: http://stackoverflow.com/a/30403863/661022 – pedrouan

Odpowiedz

15

Jeśli chcesz użyć rozszerzenia, po prostu dodaj je do pliku, na początku lub na końcu. Możesz stworzyć dodatkowy plik dla takiego kodu.

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)) 

do uprawy w środkowej części obrazu:

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

Wysłałem przykład w najnowszym Swift 3.0. Jeśli pracujesz w starszej wersji, skopiuj wklej będzie wymagać pewnych poprawek. – pedrouan

+0

Przycinanie wydaje się działać, ale nie mogę go przyciąć sekcji obrazu, który faktycznie chcę. Na przykład argumenty (50, 50,500,500) zwracają część obrazu z prawego górnego rogu ekranu, co nie ma dla mnie żadnego sensu. Jeśli chcę mieć prostokąt na środku ekranu (coś w rodzaju tego http://imgur.com/a/vOMsb), co powinno być prostokątem? – mawnch

+0

@KaviRamamurthy Zaktualizowałem swoją odpowiedź. – pedrouan