العمل مع الصور في Swift (iOS/macOS)
في هذه المقالة، سنستعرض بالتفصيل العمل مع الصور في Swift لمنصتي iOS وmacOS. ستتعلم كيفية تحميل الصور وعرضها ومعالجتها وحفظها باستخدام أطر Apple المدمجة: UIKit (iOS)، AppKit (macOS) و Core Image. ستكون المادة مفيدة لكل من المبتدئين والمطورين ذوي الخبرة.
الأطر الرئيسية للعمل مع الصور
في نظام Apple البيئي، توجد عدة طرق للعمل مع الصور. أهمها:
- UIKit (iOS/tvOS) —
UIImage،UIImageView - AppKit (macOS) —
NSImage،NSImageView - Core Image — إطار قوي لمعالجة الصور (فلاتر، تحويلات)
- SwiftUI —
Imageللعرض التصريحي
تحميل الصور في iOS (UIKit)
أسهل طريقة لتحميل صورة في iOS هي استخدام UIImage. مثال على التحميل من الأصول ومن ملف:
// تحميل من Assets.xcassetslet imageFromAssets = UIImage(named: "myImage")
// تحميل من ملف في Bundleif let path = Bundle.main.path(forResource: "photo", ofType: "jpg") { let imageFromFile = UIImage(contentsOfFile: path)}
// تحميل من Dataif let data = try? Data(contentsOf: URL(string: "https://example.com/image.png")!) { let imageFromData = UIImage(data: data)}عرض الصور في UIKit
لعرض الصورة، يُستخدم UIImageView:
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))imageView.image = UIImage(named: "example")imageView.contentMode = .scaleAspectFitview.addSubview(imageView)العمل مع الصور في macOS (AppKit)
في macOS، يُستخدم NSImage و NSImageView:
// تحميل الصورةlet nsImage = NSImage(named: "macImage")
// العرضlet imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 300, height: 200))imageView.image = nsImageimageView.imageScaling = .scaleProportionallyUpOrDownview.addSubview(imageView)معالجة الصور باستخدام Core Image
يوفر Core Image عشرات الفلاتر المدمجة. دعنا نستعرض العمليات الأساسية:
import CoreImage
// إنشاء CIImage من UIImageguard let uiImage = UIImage(named: "input"), let ciImage = CIImage(image: uiImage) else { return }
// تطبيق فلتر "التمويه الغاوسي"let filter = CIFilter(name: "CIGaussianBlur")filter?.setValue(ciImage, forKey: kCIInputImageKey)filter?.setValue(10.0, forKey: kCIInputRadiusKey)
// الحصول على النتيجةguard let outputImage = filter?.outputImage else { return }
// التحويل مرة أخرى إلى UIImagelet context = CIContext(options: nil)if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) { let blurredImage = UIImage(cgImage: cgImage)}الفلاتر الشائعة في Core Image
CISepiaTone— تأثير السيبياCIPhotoEffectMono— تأثير أبيض وأسودCIVignette— التظليل (Vignette)CIColorControls— السطوع، التباين، التشبعCICrop— قص الصورة
العمل مع الصور في SwiftUI
يوفر SwiftUI طريقة بسيطة وتصريحية للعمل مع الصور:
import SwiftUI
struct ContentView: View { var body: some View { Image("swiftui_image") .resizable() .scaledToFit() .frame(width: 200, height: 200) .clipShape(Circle()) .overlay(Circle().stroke(Color.blue, lineWidth: 4)) .shadow(radius: 10) }}