Arbeiten mit Bildern in Swift (iOS/macOS)
In diesem Artikel betrachten wir die grundlegenden Ansätze und Werkzeuge für die Arbeit mit Bildern im Apple-Ökosystem. Sie erfahren, wie Sie Bilder mit den integrierten Swift-Frameworks für iOS und macOS laden, anzeigen, verarbeiten und speichern. Das Material ist sowohl für Anfänger als auch für erfahrene Entwickler nützlich.
Wichtige Frameworks für die Arbeit mit Bildern
In Swift gibt es mehrere wichtige Frameworks für die Arbeit mit Grafiken:
- UIKit (iOS) —
UIImage,UIImageView - AppKit (macOS) —
NSImage,NSImageView - Core Image — Filter und Verarbeitung
- Core Graphics — Zeichnen auf niedriger Ebene
- Metal — GPU-Beschleunigung für komplexe Operationen
- SwiftUI — deklarative Oberfläche mit
Image
Laden und Anzeigen von Bildern
Betrachten wir grundlegende Beispiele für beide Plattformen.
iOS (UIKit)
import UIKit
// Laden aus Assetslet image = UIImage(named: "example")
// Laden aus Dateiif let path = Bundle.main.path(forResource: "photo", ofType: "jpg") { let imageFromFile = UIImage(contentsOfFile: path)}
// Anzeigen in UIImageViewlet imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))imageView.image = imageimageView.contentMode = .scaleAspectFitmacOS (AppKit)
import AppKit
// Laden aus Assetslet image = NSImage(named: "example")
// Laden aus Dateiif let path = Bundle.main.path(forResource: "photo", ofType: "jpg") { let imageFromFile = NSImage(contentsOfFile: path)}
// Anzeigen in NSImageViewlet imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 200, height: 200))imageView.image = imageimageView.imageScaling = .scaleProportionallyUpOrDownSwiftUI (plattformübergreifend)
import SwiftUI
struct ContentView: View { var body: some View { Image("example") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 200, height: 200) }}Bildverarbeitung mit Core Image
Core Image bietet über 200 integrierte Filter zur Bildverarbeitung. Hier ist ein Beispiel für die Anwendung von Sepia:
import CoreImage
func applySepiaFilter(to image: UIImage) -> UIImage? { guard let ciImage = CIImage(image: image) else { return nil } let filter = CIFilter(name: "CISepiaTone") filter?.setValue(ciImage, forKey: kCIInputImageKey) filter?.setValue(0.8, forKey: kCIInputIntensityKey) guard let outputImage = filter?.outputImage else { return nil } let context = CIContext() guard let cgImage = context.createCGImage(outputImage, from: outputImage.extent) else { return nil } return UIImage(cgImage: cgImage)}Größenänderung und Zuschneiden
Häufig ist es erforderlich, die Bildgröße zu ändern oder es mittig zuzuschneiden:
extension UIImage { func resized(to targetSize: CGSize) -> UIImage { let renderer = UIGraphicsImageRenderer(size: targetSize) return renderer.image { _ in self.draw(in: CGRect(origin: .zero, size: targetSize)) } } func croppedToSquare() -> UIImage { let side = min(size.width, size.height) let x = (size.width - side) / 2 let y = (size.height - side) / 2 let cropRect = CGRect(x: x, y: y, width: side, height: side) guard let cgImage = cgImage?.cropping(to: cropRect) else { return self } return UIImage(cgImage: cgImage) }}Speichern von Bildern
Betrachten wir, wie Sie ein Bild in der Galerie oder in einer Datei speichern:
Auch in der Bibliothek
UUID für JavaScript (Node.js): Komplettguide mit Beispielen
Juniper: Vollständige GraphQL-Bibliothek für Rust
ORM für Kotlin: Vergleich und Beispiele (Exposed, Ktorm, Hibernate)