2016-10-11 12 views
6

私はカスタムカメラアプリケーションを開発中です。物事はうまくいっている。下からプログラムで画像を切り抜く

しかし、画像を一番下から切り取っているうちに問題が発生しました。すなわち切り取られた画像は元の画像と全く同じ幅を有するが、高さは元の画像の1/3であり、それは底部から開始しなければならない。

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

答えて

17

スウィフト3溶液:RECTとトリミング用

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

ヘルパーメソッド:

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

方法:

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

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

コール:

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

私は2448×3264のイメージサイズがあるとします。その部分は赤です。 toRectパラメータは何ですか? – BornShell

+0

参照:http://stackoverflow.com/questions/37946990/cgrectmake-cgpointmake-cgsizemake-cgrectzero-cgpointzero-is-unavailable-in –

7

これはほとんどAlexburtnikの答え

ですが、ちょうどUIImage.sizeは( "ポイント" で)論理的なサイズであることを言及する

しかし、CGImage.croppingは()(実際の寸法を使用しました

したがって、@ 2xまたは@ 3x修飾子を使用してイメージを使用すると、 クロッピングが実際に予想の半分または1/3になることがわかります。

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

:UIImageの拡張として

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

ので、あなたはトリミングすると、次のように、第1の画像の「スケール」プロパティで矩形を掛ける検討することができます使用法:

let myImage = UIImage(named:"myImage.png")  
let croppedRect = CGRect(x: 0, y: 0, width: newWidth, height: newHeight) 
let croppedImage = myImage.crop(to: croppedRect) 
関連する問題