Swift पर छवियों के साथ कार्य: iOS और macOS के लिए resize और crop
मोबाइल और डेस्कटॉप एप्लिकेशन विकसित करते समय छवि प्रसंस्करण सबसे सामान्य कार्यों में से एक है। Apple प्लेटफ़ॉर्म (iOS और macOS) पर छवियों का आकार बदलने (resize) और क्रॉप करने (crop) के लिए, आप अंतर्निहित फ्रेमवर्क (UIKit iOS के लिए, AppKit macOS के लिए) और शक्तिशाली निम्न-स्तरीय Core Graphics दोनों का उपयोग कर सकते हैं। इस लेख में, हम सार्वभौमिक विधियों पर चर्चा करेंगे जो दोनों प्लेटफ़ॉर्म पर काम करती हैं, और Swift में तैयार कोड उदाहरण प्रदान करेंगे।
छवि प्रसंस्करण के मुख्य दृष्टिकोण
Swift में छवि का आकार बदलने या क्रॉप करने के तीन मुख्य तरीके हैं:
- UIKit (iOS/tvOS) —
UIImageक्लास और इसकेdraw(in:)याUIGraphicsImageRendererविधियों का उपयोग करता है। - AppKit (macOS) —
NSImageक्लास औरNSGraphicsContextके साथ कार्य का उपयोग करता है। - Core Graphics (Quartz 2D) — एक क्रॉस-प्लेटफ़ॉर्म निम्न-स्तरीय C-फ्रेमवर्क जो iOS और macOS दोनों पर काम करता है। यह
CGImageऔर ग्राफिकल कॉन्टेक्स्ट पर आधारित है।
सार्वभौमिकता के लिए, हम Core Graphics का उपयोग करेंगे, क्योंकि यह कोड लिखने की अनुमति देता है जो आसानी से दोनों प्लेटफ़ॉर्म के अनुकूल हो जाता है। हालांकि, iOS प्रोजेक्ट्स के लिए अक्सर UIGraphicsImageRenderer का उपयोग करना अधिक सुविधाजनक होता है - यह सरल और तेज़ है।
छवि का आकार बदलना (Resize)
Resize फ़ंक्शन मूल छवि (UIImage या NSImage) और एक नया आकार (CGSize) लेता है। एल्गोरिथ्म सरल है: आवश्यक आकार का एक ग्राफिकल कॉन्टेक्स्ट बनाया जाता है, उसमें मूल छवि खींची जाती है, फिर कॉन्टेक्स्ट से एक नई छवि निकाली जाती है।
iOS के लिए उदाहरण (UIKit)
import UIKit
extension UIImage { func resized(to newSize: CGSize) -> UIImage? { let renderer = UIGraphicsImageRenderer(size: newSize) return renderer.image { _ in self.draw(in: CGRect(origin: .zero, size: newSize)) } }}
// उपयोग:if let image = UIImage(named: "example"), let resized = image.resized(to: CGSize(width: 300, height: 200)) { // resized का उपयोग करें}macOS के लिए उदाहरण (AppKit + Core Graphics)
import AppKit
extension NSImage { func resized(to newSize: NSSize) -> NSImage? { guard let cgImage = self.cgImage(forProposedRect: nil, context: nil, hints: nil) else { return nil } let bitmap = NSBitmapImageRep( bitmapDataPlanes: nil, pixelsWide: Int(newSize.width), pixelsHigh: Int(newSize.height), bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: .deviceRGB, bitmapFormat: .alphaFirst, bytesPerRow: 0, bitsPerPixel: 0 ) guard let context = NSGraphicsContext(bitmapImageRep: bitmap!) else { return nil } NSGraphicsContext.saveGraphicsState() NSGraphicsContext.current = context let rect = NSRect(origin: .zero, size: newSize) self.draw(in: rect, from: .zero, operation: .copy, fraction: 1.0) NSGraphicsContext.restoreGraphicsState() let newImage = NSImage(size: newSize) newImage.addRepresentation(bitmap!) return newImage }}छवि को क्रॉप करना (Crop)
क्रॉप करना (crop) मूल छवि से एक आयताकार क्षेत्र निकालना है। Core Graphics में, इसके लिए CGImage पर cropping(to:) फ़ंक्शन का उपयोग किया जाता है। यह याद रखना महत्वपूर्ण है कि Core Graphics में निर्देशांक निचले बाएँ कोने से शुरू होते हैं, इसलिए iOS (जहाँ Y-अक्ष नीचे की ओर है) के लिए निर्देशांक रूपांतरण की आवश्यकता हो सकती है।