2016-09-03 11 views
8

में यूआईएममेज को फसल करने में समस्याएं मैं एक ऐप लिख रहा हूं जो छवि के केंद्र में एक आयताकार को छोड़कर एक छवि लेता है और सबकुछ निकाल देता है। (स्विफ्ट) मैं फसल समारोह हालांकि काम करने के लिए नहीं मिल सकता है।स्विफ्ट

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 
    } 

मैं अलग गाइड का एक बहुत देखा है लेकिन उनमें से कोई मेरे लिए काम करने लगते हैं: यह क्या मैं अब है। कभी-कभी छवि 90 डिग्री घुमाया जाता है, मुझे नहीं पता कि यह ऐसा क्यों करता है।

+0

आपका स्वागत है। अपने प्रश्न से पहले, कृपया जांचें कि इस साइट पर कौन सा सहायक उपलब्ध है। http://stackoverflow.com/questions/158914/cropping-an-uiimage/29294333#29294333 – pedrouan

+0

एक समान प्रश्न की तरह दिखता है, लेकिन मुझे स्विफ्ट के साथ समस्या है, उद्देश्य-सी नहीं। – mawnch

+0

और तेजी से भी कई समाधान हैं। यह सबसे अच्छा दिखता है: http://stackoverflow.com/a/30403863/661022 – pedrouan

उत्तर

15

यदि आप एक एक्सटेंशन का उपयोग करना चाहते हैं, तो बस इसे शुरुआत में, या अंत में फ़ाइल में जोड़ें। आप इस तरह के कोड के लिए एक अतिरिक्त फाइल बना सकते हैं।

स्विफ्ट 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)) 

एक छवि का एक केंद्र हिस्से की फसल के लिए: अतिप्रवाह ढेर

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

मैंने नवीनतम स्विफ्ट 3.0 में उदाहरण पोस्ट किया। यदि आप पुराने संस्करण में काम करते हैं, तो कॉपी पेस्ट को कुछ सुधार की आवश्यकता होगी। – pedrouan

+0

फसल काम करने लगती है लेकिन मैं इसे उस छवि के अनुभाग को फसल करने के लिए नहीं मिल सकता जो मैं वास्तव में चाहता हूं। उदाहरण के लिए, तर्क (50,50,500,500) स्क्रीन के ऊपरी दाएं से छवि का एक हिस्सा देता है, जो मुझे कोई समझ नहीं आता है। अगर मैं स्क्रीन के बीच में एक आयत चाहता हूं (इस तरह की तरह http://imgur.com/a/vOMsb) आयताकार तर्क क्या होना चाहिए? – mawnch

+0

@KaviRamamurthy मैंने अपना जवाब अपडेट कर लिया है। – pedrouan