Swift में इमेज resize और crop: iOS/macOS गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift में इमेज प्रोसेसिंग: resize और crop (iOS/macOS)

iOS और macOS ऐप डेवलपमेंट में इमेज प्रोसेसिंग एक अहम हिस्सा है। चाहे यूज़र का अवतार अपलोड करना हो, फोटो का प्रीव्यू बनाना हो या ग्राफिक कंटेंट के साथ काम करना हो, आपको लगभग हमेशा इमेज का आकार बदलने (resize) और क्रॉप (crop) करने की ज़रूरत पड़ेगी। इस आर्टिकल में हम Swift में ये काम करना सीखेंगे, जिसमें UIKit (iOS के लिए), AppKit (macOS के लिए) और Core Graphics का इस्तेमाल होगा।

मुख्य तरीके

Apple इकोसिस्टम में इमेज मैनिपुलेशन के कई तरीके हैं। हम दो सबसे लोकप्रिय और परफॉर्मेंट तरीकों पर ध्यान देंगे:

  • UIKit / AppKit + Core Graphics — यह लो-लेवल लेकिन बहुत लचीला तरीका है। इससे आप रिज़ल्ट की क्वालिटी और साइज़ पर पूरा कंट्रोल रख सकते हैं।
  • Image I/O — यह फ्रेमवर्क मेटाडेटा और इमेज को एनकोड/डीकोड करने के लिए है। बड़ी फाइलों के साथ काम करते समय परफॉर्मेंस के लिए यह बेहतरीन है।

इस आर्टिकल में हम पहले तरीके पर फोकस करेंगे, क्योंकि यह सबसे यूनिवर्सल है और इसमें किसी एक्सट्रा डिपेंडेंसी की ज़रूरत नहीं है।

इमेज का आकार बदलना (Resize)

रीसाइज़ फंक्शन ओरिजिनल इमेज और टार्गेट साइज़ लेता है, और निर्धारित पैरामीटर्स के साथ एक नई इमेज रिटर्न करता है। इमेज को बिगड़ने से बचाने के लिए अनुपात (proportions) बनाए रखना ज़रूरी है।

iOS (UIKit) के लिए उदाहरण

import UIKit

extension UIImage {
    func resized(to targetSize: CGSize) -> UIImage? {
        // targetSize में फिट होने के लिए स्केल तय करें, अनुपात बनाए रखें
        let widthRatio  = targetSize.width  / size.width
        let heightRatio = targetSize.height / size.height
        let scale = min(widthRatio, heightRatio)
        
        // अनुपात बनाए रखते हुए नया साइज़
        let newSize = CGSize(width: size.width * scale, height: size.height * scale)
        
        // नए साइज़ के साथ ग्राफिकल कॉन्टेक्स्ट बनाएं
        UIGraphicsBeginImageContextWithOptions(newSize, false, 0.0)
        draw(in: CGRect(origin: .zero, size: newSize))
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return newImage
    }
}

// उपयोग:
if let image = UIImage(named: "example"),
   let resized = image.resized(to: CGSize(width: 300, height: 200)) {
    // resized इमेज का उपयोग करें
}

macOS (AppKit) के लिए उदाहरण

import AppKit

extension NSImage {
    func resized(to targetSize: NSSize) -> NSImage? {
        let widthRatio  = targetSize.width  / size.width
        let heightRatio = targetSize.height / size.height
        let scale = min(widthRatio, heightRatio)
        
        let newSize = NSSize(width: size.width * scale, height: size.height * scale)
        let newImage = NSImage(size: newSize)
        
        newImage.lockFocus()
        draw(in: NSRect(origin: .zero, size: newSize),
             from: NSRect(origin: .zero, size: size),
             operation: .copy,
             fraction: 1.0)
        newImage.unlockFocus()
        
        return newImage
    }
}
ज़रूरी: macOS में UIGraphicsBeginImageContextWithOptions उपलब्ध नहीं है। इसके बजाय lockFocus()/unlockFocus() या Core Graphics का उपयोग करें।

इमेज क्रॉप करना (Crop)

क्रॉप करने से आप ओरिजिनल इमेज से एक आयताकार क्षेत्र निकाल सकते हैं। इसका उपयोग अक्सर स्क्वायर अवतार बनाने या अनावश्यक किनारों को हटाने के लिए किया जाता है।

Core Graphics के साथ यूनिवर्सल तरीका

import CoreGraphics

extension UIImage {
    func cropped(to rect: CGRect) -> UIImage? {
        guard let cgImage = self.cgImage else { return nil }
        // स्क्रीन के scale को ध्यान में रखें (Retina डिस्प्ले के लिए)
        let scaledRect = CGRect(
            x: rect.origin.x * self.scale,
            y: rect.origin.y * self.scale,
            width: rect.width * self.scale,
            height: rect.height * self.scale
        )
        guard let croppedCGImage = cgImage.cropping(to: scaledRect) else { return nil }
        return UIImage(cgImage: croppedCGImage, scale: self.scale, orientation: self.imageOrientation)
    }
}

// उपयोग:
if let image = UIImage(named: "example"),
   let cropped = image.cropped(to: CGRect(x: 50, y: 50, width: 200, height: 200)) {
    // cropped इमेज का उपयोग करें
}

यह तरीका iOS और macOS दोनों पर काम करता है, क्योंकि Core Graphics दोनों प्लेटफॉर्म पर उपलब्ध है।

निष्कर्ष

Swift में इमेज को resize और crop करना सीखना किसी भी iOS/macOS डेवलपर के लिए ज़रूरी है। ऊपर दिए गए तरीके आपको बिना किसी थर्ड-पार्टी लाइब्रेरी के ये काम करने में मदद करेंगे। अगर आप और भी एडवांस्ड फीचर्स चाहते हैं, तो Core Image या Metal फ्रेमवर्क का उपयोग कर सकते हैं।

अनुशंसाएँ