इस प्रश्न का आराम करने के लिए डाल दिया गया है लगता है, लेकिन एक समाधान है कि मैं अधिक आसानी से समझ (और स्विफ्ट में लिखा) कर सकता है के लिए अपनी खोज में, मैं इस पर पहुंचे (भी पर पोस्ट किया: ? UIImage फसल कैसे )
मैं एक आकार एक बाहरी सीमांकन हद के आधार पर करने के लिए एक क्षेत्र एक पहलू अनुपात के आधार पर, और बड़े पैमाने से फसल के लिए सक्षम होना चाहता था। यहाँ मेरी भिन्नता है:
import AVFoundation
import ImageIO
class Image {
class func crop(image:UIImage, crop source:CGRect, aspect:CGSize, outputExtent:CGSize) -> UIImage {
let sourceRect = AVMakeRectWithAspectRatioInsideRect(aspect, source)
let targetRect = AVMakeRectWithAspectRatioInsideRect(aspect, CGRect(origin: CGPointZero, size: outputExtent))
let opaque = true, deviceScale:CGFloat = 0.0 // use scale of device's main screen
UIGraphicsBeginImageContextWithOptions(targetRect.size, opaque, deviceScale)
let scale = max(
targetRect.size.width / sourceRect.size.width,
targetRect.size.height / sourceRect.size.height)
let drawRect = CGRect(origin: -sourceRect.origin * scale, size: image.size * scale)
image.drawInRect(drawRect)
let scaledImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return scaledImage
}
}
नीचे दिए कुछ है कि मैं भ्रमित पाया, फसल और आकार बदलने के अलग-अलग मुद्दे हैं। फसल रेक्ट कि आप drawInRect के पास की उत्पत्ति के साथ नियंत्रित किया जाता है, और स्केलिंग आकार भाग द्वारा नियंत्रित किया जाता। मेरे मामले में, मैं स्रोत पर फसल रेक्ट के आकार से संबंधित, एक ही पहलू अनुपात के अपने उत्पादन रेक्ट की जरूरत है। पैमाने कारक तो उत्पादन / इनपुट है, और इस drawRect (drawInRect के लिए पारित) के लिए लागू किया जाना चाहिए।
एक चेतावनी इस दृष्टिकोण प्रभावी रूप से मानता है कि उस छवि को आप बना रहे हैं छवि संदर्भ से भी बड़ा है। मैं इस परीक्षण नहीं किया है, लेकिन मुझे लगता है कि आप फसल / जूमिंग, लेकिन स्पष्ट रूप से परिभाषित करने पैमाने पैरामीटर ऊपर उल्लिखित पैमाने पैरामीटर होने की संभाल करने के लिए इस कोड का उपयोग कर सकते हैं। डिफ़ॉल्ट रूप से, UIKit स्क्रीन रिज़ॉल्यूशन के आधार पर एक गुणक लागू होता है।
अंत में, यह ध्यान दिया जाना चाहिए कि इस UIKit दृष्टिकोण CoreGraphics / क्वार्ट्ज और मुख्य छवि दृष्टिकोण की तुलना में अधिक स्तर है, और छवि उन्मुखीकरण मुद्दों को संभालने के लिए लगता है। यह भी उल्लेख है कि यह बहुत तेजी ImageIO से पीछे नहीं है लायक है, इस पोस्ट यहाँ के अनुसार: http://nshipster.com/image-resizing/