Trabalho com imagens em Swift: redimensionamento e corte para iOS/macOS

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalho com imagens em Swift: redimensionamento e corte para iOS e macOS

O processamento de imagens é uma das tarefas mais comuns no desenvolvimento de aplicativos móveis e desktop. Nas plataformas Apple (iOS e macOS), para redimensionar (resize) e cortar (crop) imagens, é possível usar tanto frameworks nativos (UIKit para iOS, AppKit para macOS) quanto o poderoso framework de baixo nível Core Graphics. Neste artigo, abordaremos métodos universais que funcionam em ambas as plataformas e forneceremos exemplos de código prontos em Swift.



Principais abordagens para processamento de imagens

Existem três maneiras principais de redimensionar ou cortar uma imagem em Swift:

  • UIKit (iOS/tvOS) — usa a classe UIImage e seus métodos draw(in:) ou UIGraphicsImageRenderer.
  • AppKit (macOS) — usa a classe NSImage e o trabalho com NSGraphicsContext.
  • Core Graphics (Quartz 2D) — framework C de baixo nível multiplataforma que funciona tanto no iOS quanto no macOS. Baseado em CGImage e contextos gráficos.

Para universalidade, usaremos Core Graphics, pois permite escrever código que se adapta facilmente a ambas as plataformas. No entanto, para projetos iOS, geralmente é mais conveniente usar UIGraphicsImageRenderer — é mais simples e rápido.



Redimensionamento de imagem (Resize)

A função de redimensionamento recebe a imagem original (UIImage ou NSImage) e um novo tamanho (CGSize). O algoritmo é simples: cria-se um contexto gráfico do tamanho desejado, desenha-se a imagem original nele e, em seguida, extrai-se a nova imagem do contexto.



Exemplo para iOS (UIKit)

import UIKit

extension UIImage { func resized(to newSize: CGSize) -> UIImage? { let renderer = UIGraphicsImageRenderer(size: newSize) return renderer.image { _ in self.draw(in: CGRect(origin: .zero, size: newSize)) } }}

// Uso:if let image = UIImage(named: "example"), let resized = image.resized(to: CGSize(width: 300, height: 200)) { // usar resized}


Exemplo para macOS (AppKit + Core Graphics)

import AppKit

extension NSImage { func resized(to newSize: NSSize) -> NSImage? { guard let cgImage = self.cgImage(forProposedRect: nil, context: nil, hints: nil) else { return nil } let bitmap = NSBitmapImageRep( bitmapDataPlanes: nil, pixelsWide: Int(newSize.width), pixelsHigh: Int(newSize.height), bitsPerSample: 8, samplesPerPixel: 4, hasAlpha: true, isPlanar: false, colorSpaceName: .deviceRGB, bitmapFormat: .alphaFirst, bytesPerRow: 0, bitsPerPixel: 0 ) guard let context = NSGraphicsContext(bitmapImageRep: bitmap!) else { return nil } NSGraphicsContext.saveGraphicsState() NSGraphicsContext.current = context let rect = NSRect(origin: .zero, size: newSize) self.draw(in: rect, from: .zero, operation: .copy, fraction: 1.0) NSGraphicsContext.restoreGraphicsState() let newImage = NSImage(size: newSize) newImage.addRepresentation(bitmap!) return newImage }}


Corte de imagem (Crop)

O corte (crop) é a extração de uma área retangular da imagem original. No Core Graphics, usa-se a função cropping(to:) do CGImage. É importante lembrar que as coordenadas no Core Graphics começam no canto inferior esquerdo, portanto, para iOS (onde o eixo Y é invertido), pode ser necessária uma transformação de coordenadas.



Função universal de corte para iOS e macOS

\

Recommendations