2016-10-11 19 views
6

मैं कस्टम कैमरा एप्लिकेशन पर काम कर रहा हूं। चीजें अच्छी तरह से काम कर रही हैं।नीचे प्रोग्रामेटिक रूप से क्रॉप छवि

लेकिन नीचे से छवि को फसल करते समय मुझे समस्या आई। यानी फसल की छवि मूल छवि के समान सटीक चौड़ाई वाली है लेकिन ऊंचाई मूल छवि का 1/3 होगा और इसे नीचे से शुरू होना चाहिए।

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

उत्तर

17

स्विफ्ट 3 समाधान: एक रेक्ट साथ फसल के लिए

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 संशोधक के साथ एक छवि का उपयोग करते हैं, तो आपको फसल वास्तव में आधा या एक तिहाई उम्मीद मिल जाएगी।

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

:

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

UIImage के लिए एक विस्तार के रूप में:

इसलिए जब आप फसल, आप छवि का "पैमाने" संपत्ति से रेक्ट गुणा पहले, निम्न प्रकार के विचार कर सकते हैं उपयोग:

let myImage = UIImage(named:"myImage.png")  
let croppedRect = CGRect(x: 0, y: 0, width: newWidth, height: newHeight) 
let croppedImage = myImage.crop(to: croppedRect) 
संबंधित मुद्दे