العمل مع الصور في Swift: دليل شامل لنظامي iOS وmacOS

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع الصور في Swift (iOS/macOS)



العمل مع الصور هي إحدى المهام الأساسية في تطوير تطبيقات الأجهزة المحمولة وسطح المكتب. في Swift لنظامي iOS وmacOS، توجد العديد من الأدوات المدمجة التي تسمح بتحميل الصور وعرضها ومعالجتها وحفظها. في هذه المقالة، سنستعرض بالتفصيل الأساليب الرئيسية وواجهات برمجة التطبيقات (API) التي ستساعدك على العمل بكفاءة مع الرسومات على منصات Apple.



الفئات الأساسية للعمل مع الصور

اعتمادًا على المنصة، تُستخدم فئات مختلفة:

  • iOS/tvOS/watchOS — UIImage (UIKit)
  • macOS — NSImage (AppKit)

توفر كلتا الفئتين إمكانيات متشابهة، لكنهما تختلفان في واجهة برمجة التطبيقات (API). للتطوير عبر المنصات، يمكن استخدام بروتوكولات مشتركة أو إضافات.



تحميل الصور

أبسط طريقة هي تحميل صورة من موارد التطبيق:

// iOSlet image = UIImage(named: "example")

// macOSlet image = NSImage(named: "example")

للتحميل من الشبكة، استخدم URLSession:

guard let url = URL(string: "https://example.com/image.jpg") else { return }

URLSession.shared.dataTask(with: url) { data, response, error in guard let data = data, error == nil else { return } DispatchQueue.main.async { // iOS let image = UIImage(data: data) // macOS let image = NSImage(data: data) }}.resume()


عرض الصور

لعرض الصور على الشاشة، تُستخدم مكونات العرض (view) المناسبة:

  • iOS — UIImageView
  • macOS — NSImageView
// iOSlet imageView = UIImageView(image: UIImage(named: "photo"))imageView.contentMode = .scaleAspectFit

// macOSlet imageView = NSImageView(image: NSImage(named: "photo"))imageView.imageScaling = .scaleProportionallyUpOrDown


معالجة الصور باستخدام Core Image

Core Image هو إطار عمل قوي لتصفية ومعالجة الصور. لنلقِ نظرة على مثال أساسي لتطبيق مرشح:

import CoreImage

func applyFilter(to inputImage: CIImage) -> CIImage? { guard let filter = CIFilter(name: "CISepiaTone") else { return nil } filter.setValue(inputImage, forKey: kCIInputImageKey) filter.setValue(0.8, forKey: kCIInputIntensityKey) return filter.outputImage}

// الاستخدامlet originalImage = CIImage(image: UIImage(named: "photo")!)!if let filteredImage = applyFilter(to: originalImage) { let context = CIContext() let cgImage = context.createCGImage(filteredImage, from: filteredImage.extent) let resultImage = UIImage(cgImage: cgImage!)}

مرشحات Core Image الشائعة:

  • CISepiaTone — تأثير السيبيا
  • CIGaussianBlur — التمويه الغاوسي
  • CIColorControls — ضبط السطوع والتباين والتشبع
  • CIVignette — تأثير التظليل


العمل مع البكسلات وCGImage

للعمل على مستوى منخفض مع بيانات البكسلات، استخدم CGImage من Core Graphics:

func pixelColors(from image: UIImage) -> [[UIColor]]? {    guard let cgImage = image.cgImage else { return nil }    let width = cgImage.width    let height = cgImage.height        let colorSpace = CGColorSpaceCreateDeviceRGB()    let bytesPerPixel = 4    let bytesPerRow = bytesPerPixel * width    let bitsPerComponent = 8    var pixelData = [UInt8](repeating: 0, count: width * height * bytesPerPixel)        guard let context = CGContext(data: &pixelData,                                  width: width,                                  height: height,                                  bitsPerComponent: bitsPerComponent,                    

توصيات