Trabajo con imágenes en Swift (iOS/macOS)
En este artículo, analizaremos en detalle el trabajo con imágenes en Swift para las plataformas iOS y macOS. Aprenderá a cargar, mostrar, procesar y guardar imágenes utilizando los frameworks integrados de Apple: UIKit (iOS), AppKit (macOS) y Core Image. El material será útil tanto para principiantes como para desarrolladores experimentados.
Frameworks principales para trabajar con imágenes
En el ecosistema de Apple, existen varias formas de trabajar con imágenes. Las principales son:
- UIKit (iOS/tvOS) —
UIImage,UIImageView - AppKit (macOS) —
NSImage,NSImageView - Core Image — un potente framework para el procesamiento de imágenes (filtros, transformaciones)
- SwiftUI —
Imagepara visualización declarativa
Carga de imágenes en iOS (UIKit)
La forma más sencilla de cargar una imagen en iOS es usar UIImage. Ejemplo de carga desde assets y desde archivo:
// Carga desde Assets.xcassetslet imageFromAssets = UIImage(named: "myImage")
// Carga desde un archivo en Bundleif let path = Bundle.main.path(forResource: "photo", ofType: "jpg") { let imageFromFile = UIImage(contentsOfFile: path)}
// Carga desde Dataif let data = try? Data(contentsOf: URL(string: "https://example.com/image.png")!) { let imageFromData = UIImage(data: data)}Visualización de imágenes en UIKit
Para mostrar una imagen se utiliza UIImageView:
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))imageView.image = UIImage(named: "example")imageView.contentMode = .scaleAspectFitview.addSubview(imageView)Trabajo con imágenes en macOS (AppKit)
En macOS se utilizan NSImage y NSImageView:
// Carga de imagenlet nsImage = NSImage(named: "macImage")
// Visualizaciónlet imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 300, height: 200))imageView.image = nsImageimageView.imageScaling = .scaleProportionallyUpOrDownview.addSubview(imageView)Procesamiento de imágenes con Core Image
Core Image proporciona decenas de filtros integrados. Veamos las operaciones básicas:
import CoreImage
// Creamos un CIImage a partir de UIImageguard let uiImage = UIImage(named: "input"), let ciImage = CIImage(image: uiImage) else { return }
// Aplicamos el filtro "Desenfoque Gaussiano"let filter = CIFilter(name: "CIGaussianBlur")filter?.setValue(ciImage, forKey: kCIInputImageKey)filter?.setValue(10.0, forKey: kCIInputRadiusKey)
// Obtenemos el resultadoguard let outputImage = filter?.outputImage else { return }
// Convertimos de vuelta a UIImagelet context = CIContext(options: nil)if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) { let blurredImage = UIImage(cgImage: cgImage)}Filtros populares de Core Image
CISepiaTone— sepiaCIPhotoEffectMono— efecto blanco y negroCIVignette— viñeteadoCIColorControls— brillo, contraste, saturaciónCICrop— recorte de imagen
Trabajo con imágenes en SwiftUI
SwiftUI proporciona una forma simple y declarativa de trabajar con imágenes:
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) }}