Travailler avec les images en Swift (iOS/macOS)
Travailler avec les images est l'une des tâches clés dans le développement d'applications mobiles et de bureau. En Swift pour iOS et macOS, il existe de nombreux outils intégrés permettant de charger, afficher, traiter et enregistrer des images. Dans cet article, nous examinerons en détail les approches et API principales qui vous aideront à travailler efficacement avec les graphismes sur les plateformes Apple.
Classes principales pour travailler avec les images
Selon la plateforme, différentes classes sont utilisées :
- iOS/tvOS/watchOS —
UIImage(UIKit) - macOS —
NSImage(AppKit)
Les deux classes offrent des fonctionnalités similaires, mais présentent des différences dans l'API. Pour le développement multiplateforme, vous pouvez utiliser des protocoles communs ou des extensions.
Chargement des images
La méthode la plus simple consiste à charger une image depuis les ressources de l'application :
// iOSlet image = UIImage(named: "example")
// macOSlet image = NSImage(named: "example")Pour le chargement depuis le réseau, utilisez 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()Affichage des images
Pour afficher des images à l'écran, utilisez les composants view correspondants :
- iOS —
UIImageView - macOS —
NSImageView
// iOSlet imageView = UIImageView(image: UIImage(named: "photo"))imageView.contentMode = .scaleAspectFit
// macOSlet imageView = NSImageView(image: NSImage(named: "photo"))imageView.imageScaling = .scaleProportionallyUpOrDownTraitement des images avec Core Image
Core Image est un framework puissant pour le filtrage et le traitement des images. Voici un exemple de base d'application d'un filtre :
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}
// Utilisationlet 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!)}Filtres Core Image populaires :
CISepiaTone— sépiaCIGaussianBlur— flou gaussienCIColorControls— réglage de la luminosité, du contraste, de la saturationCIVignette— vignettage
Travailler avec les pixels et CGImage
Pour un travail de bas niveau avec les données de pixels, utilisez CGImage de 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, Aussi dans la bibliothèque
Travailler avec les archives ZIP en Go : guide complet du package archive/zip
Rector PHP : guide complet avec exemples concrets
Envoi de SMS en PHP : API des bibliothèques sms.ru et autres services
Rate Limiting en Swift : gestion de la fréquence des requêtes dans iOS/macOS