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 फ्रेमवर्क का उपयोग कर सकते हैं।
पुस्तकालय में भी
C# (.NET) पर PDF रिपोर्ट जनरेशन: iTextSharp, QuestPDF, PDFsharp
Sphinx Python: कोड से डॉक्यूमेंटेशन जनरेट करना सीखें
C++ में Event Bus और Observer पैटर्न: कोड के साथ पूरी गाइड
Rust में इमेज प्रोसेसिंग: image और imageproc के साथ resize और crop