Arbeiten mit Bildern in Swift (iOS/macOS)
Das Arbeiten mit Bildern ist eine der Kernaufgaben bei der Entwicklung von mobilen und Desktop-Anwendungen. In Swift für iOS und macOS gibt es zahlreiche integrierte Werkzeuge zum Laden, Anzeigen, Verarbeiten und Speichern von Bildern. In diesem Artikel betrachten wir ausführlich die grundlegenden Ansätze und APIs, die Ihnen helfen, effizient mit Grafiken auf Apple-Plattformen zu arbeiten.
Grundlegende Klassen für die Arbeit mit Bildern
Je nach Plattform werden unterschiedliche Klassen verwendet:
- iOS/tvOS/watchOS —
UIImage(UIKit) - macOS —
NSImage(AppKit)
Beide Klassen bieten ähnliche Funktionen, unterscheiden sich jedoch in der API. Für die plattformübergreifende Entwicklung können gemeinsame Protokolle oder Erweiterungen verwendet werden.
Bilder laden
Der einfachste Weg ist das Laden eines Bildes aus den App-Ressourcen:
// iOSlet image = UIImage(named: "example")
// macOSlet image = NSImage(named: "example")Für das Laden aus dem Netz verwenden Sie 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()Bilder anzeigen
Zur Anzeige von Bildern auf dem Bildschirm werden die entsprechenden View-Komponenten verwendet:
- iOS —
UIImageView - macOS —
NSImageView
// iOSlet imageView = UIImageView(image: UIImage(named: "photo"))imageView.contentMode = .scaleAspectFit
// macOSlet imageView = NSImageView(image: NSImage(named: "photo"))imageView.imageScaling = .scaleProportionallyUpOrDownBildverarbeitung mit Core Image
Core Image ist ein leistungsstarkes Framework zum Filtern und Verarbeiten von Bildern. Betrachten wir ein grundlegendes Beispiel zur Anwendung eines Filters:
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}
// Verwendunglet 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!)}Beliebte Core Image Filter:
CISepiaTone— SepiaCIGaussianBlur— Gaußsche UnschärfeCIColorControls— Einstellung von Helligkeit, Kontrast, SättigungCIVignette— Vignettierung
Arbeiten mit Pixeln und CGImage
Für die Arbeit auf niedriger Ebene mit Pixeldaten verwenden Sie CGImage aus 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, Auch in der Bibliothek
Arbeiten mit XML in Swift: Parsen, Erstellen und Verarbeiten von Daten (iOS/macOS)
Geolokalisierung und Karten in C# (.NET): Überblick über Bibliotheken und Werkzeuge
Kotlin Standardbibliothek: vollständiger Überblick und Beispiele
CMake für C++: vollständiger Leitfaden mit Beispielen