Trabajo con imágenes en Swift (iOS/macOS): guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con imágenes en Swift (iOS/macOS)

En este artículo, exploraremos los enfoques y herramientas principales para trabajar con imágenes en el ecosistema de Apple. Aprenderá a cargar, mostrar, procesar y guardar imágenes utilizando los frameworks integrados de Swift para iOS y macOS. El material será útil tanto para principiantes como para desarrolladores experimentados.



Frameworks principales para trabajar con imágenes

En Swift existen varios frameworks clave para trabajar con gráficos:

  • UIKit (iOS) — UIImage, UIImageView
  • AppKit (macOS) — NSImage, NSImageView
  • Core Image — filtros y procesamiento
  • Core Graphics — dibujo de bajo nivel
  • Metal — aceleración por GPU para operaciones complejas
  • SwiftUI — interfaz declarativa con Image


Carga y visualización de imágenes

Veamos ejemplos básicos para ambas plataformas.



iOS (UIKit)

import UIKit

// Carga desde assetslet image = UIImage(named: "example")

// Carga desde archivoif let path = Bundle.main.path(forResource: "photo", ofType: "jpg") { let imageFromFile = UIImage(contentsOfFile: path)}

// Visualización en UIImageViewlet imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))imageView.image = imageimageView.contentMode = .scaleAspectFit


macOS (AppKit)

import AppKit

// Carga desde assetslet image = NSImage(named: "example")

// Carga desde archivoif let path = Bundle.main.path(forResource: "photo", ofType: "jpg") { let imageFromFile = NSImage(contentsOfFile: path)}

// Visualización en NSImageViewlet imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 200, height: 200))imageView.image = imageimageView.imageScaling = .scaleProportionallyUpOrDown


SwiftUI (multiplataforma)

import SwiftUI

struct ContentView: View { var body: some View { Image("example") .resizable() .aspectRatio(contentMode: .fit) .frame(width: 200, height: 200) }}


Procesamiento de imágenes con Core Image

Core Image proporciona más de 200 filtros integrados para el procesamiento de imágenes. Aquí hay un ejemplo de aplicación de 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)}


Cambio de tamaño y recorte

A menudo es necesario cambiar el tamaño de una imagen o recortarla centrada:



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)    }}


Guardado de imágenes

Veamos cómo guardar una imagen en la galería o en un archivo:

Recommendations