2016-10-11 20 views
6

Tôi đang làm việc trên ứng dụng máy ảnh tùy chỉnh. Mọi thứ đang hoạt động tốt.Cắt ảnh từ dưới cùng theo chương trình

Nhưng tôi đã gặp sự cố khi cắt hình ảnh từ dưới cùng. tức là hình ảnh được cắt có chiều rộng chính xác giống với hình ảnh gốc nhưng chiều cao sẽ bằng 1/3 hình ảnh gốc và nó phải bắt đầu từ dưới cùng.

For Example Like this is the full image I need the red part only

Trả lời

17

Swift 3 giải pháp:

func cropBottomImage(image: UIImage) -> UIImage { 
    let height = CGFloat(image.size.height/3) 
    let rect = CGRect(x: 0, y: image.size.height - height, width: image.size.width, height: height) 
    return cropImage(image: image, toRect: rect) 
} 

phương pháp trợ giúp cho cắt xén với một rect:

func cropImage(image:UIImage, toRect rect:CGRect) -> UIImage{ 
    let imageRef:CGImage = image.cgImage!.cropping(to: rect)! 
    let croppedImage:UIImage = UIImage(cgImage:imageRef) 
    return croppedImage 
} 
0

Phương pháp:

func croppIngimage(ImageCrop:UIImage, toRect rect:CGRect) -> UIImage{ 

    var imageRef:CGImageRef = CGImageCreateWithImageInRect(imageToCrop.CGImage, rect) 
    var croppedimage:UIImage = UIImage(CGImage:imageRef) 
    return croppedimage 
} 

Gọi:

var ImageCrop:UIImage = UIImage(named:"image.png") 
+0

Giả sử tôi có kích thước hình ảnh là 2448 × 3264 tôi muốn phần đó có nghĩa là màu đỏ. Các tham số toRect là gì ???? – BornShell

+0

Xem thông tin này: http://stackoverflow.com/questions/37946990/cgrectmake-cgpointmake-cgsizemake-cgrectzero-cgpointzero-is-unavailable-in –

7

này là gần như Alexburtnik của câu trả lời

nhưng chỉ đề cập rằng UIImage.size là kích thước hợp lý (trong "điểm")

Tuy nhiên, CGImage.cropping() được sử dụng kích thước thực tế (theo "pixel")

do đó, nếu bạn sử dụng hình ảnh có @ 2x hoặc @ 3x công cụ sửa đổi, bạn sẽ thấy việc cắt thực sự là một nửa hoặc một phần ba kỳ vọng.

vì vậy khi bạn cắt, bạn có thể xem xét nhân rect bởi thuộc tính của hình ảnh "quy mô" đầu tiên, giống như sau:

func cropImage(image:UIImage, toRect rect:CGRect) -> UIImage? { 
    var rect = rect 
    rect.size.width = rect.width * image.scale 
    rect.size.height = rect.height * image.scale 

    guard let imageRef = image.cgImage?.cropping(to: rect) else { 
     return nil 
    } 

    let croppedImage = UIImage(cgImage:imageRef) 
    return croppedImage 
} 
0

Là một phần mở rộng cho UIImage:

import UIKit 

extension UIImage { 
    func crop(to rect: CGRect) -> UIImage? { 
     // Modify the rect based on the scale of the image 
     var rect = rect 
     rect.size.width = rect.size.width * self.scale 
     rect.size.height = rect.size.height * self.scale 

     // Crop the image 
     guard let imageRef = self.cgImage?.cropping(to: rect) else { 
      return nil 
     } 

     return UIImage(cgImage: imageRef) 
    } 
} 

Cách sử dụng:

let myImage = UIImage(named:"myImage.png")  
let croppedRect = CGRect(x: 0, y: 0, width: newWidth, height: newHeight) 
let croppedImage = myImage.crop(to: croppedRect) 
Các vấn đề liên quan