Trabalhando com imagens em Swift (iOS/macOS)
Neste artigo, abordaremos detalhadamente o trabalho com imagens em Swift para as plataformas iOS e macOS. Você aprenderá a carregar, exibir, processar e salvar imagens usando os frameworks nativos da Apple: UIKit (iOS), AppKit (macOS) e Core Image. O material será útil tanto para iniciantes quanto para desenvolvedores experientes.
Principais frameworks para trabalhar com imagens
No ecossistema Apple, existem várias maneiras de trabalhar com imagens. As principais são:
- UIKit (iOS/tvOS) —
UIImage,UIImageView - AppKit (macOS) —
NSImage,NSImageView - Core Image — um poderoso framework para processamento de imagens (filtros, transformações)
- SwiftUI —
Imagepara exibição declarativa
Carregando imagens no iOS (UIKit)
A maneira mais simples de carregar uma imagem no iOS é usar UIImage. Exemplo de carregamento de assets e de arquivo:
// Carregamento de Assets.xcassetslet imageFromAssets = UIImage(named: "myImage")
// Carregamento de arquivo no Bundleif let path = Bundle.main.path(forResource: "photo", ofType: "jpg") { let imageFromFile = UIImage(contentsOfFile: path)}
// Carregamento de Dataif let data = try? Data(contentsOf: URL(string: "https://example.com/image.png")!) { let imageFromData = UIImage(data: data)}Exibindo imagens no UIKit
Para exibir uma imagem, usa-se UIImageView:
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 200, height: 200))imageView.image = UIImage(named: "example")imageView.contentMode = .scaleAspectFitview.addSubview(imageView)Trabalhando com imagens no macOS (AppKit)
No macOS, usa-se NSImage e NSImageView:
// Carregamento de imagemlet nsImage = NSImage(named: "macImage")
// Exibiçãolet imageView = NSImageView(frame: NSRect(x: 0, y: 0, width: 300, height: 200))imageView.image = nsImageimageView.imageScaling = .scaleProportionallyUpOrDownview.addSubview(imageView)Processamento de imagens com Core Image
Core Image oferece dezenas de filtros integrados. Vamos ver operações básicas:
import CoreImage
// Criando um CIImage a partir de UIImageguard let uiImage = UIImage(named: "input"), let ciImage = CIImage(image: uiImage) else { return }
// Aplicando o filtro "Desfoque Gaussiano"let filter = CIFilter(name: "CIGaussianBlur")filter?.setValue(ciImage, forKey: kCIInputImageKey)filter?.setValue(10.0, forKey: kCIInputRadiusKey)
// Obtendo o resultadoguard let outputImage = filter?.outputImage else { return }
// Convertendo de volta para UIImagelet context = CIContext(options: nil)if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) { let blurredImage = UIImage(cgImage: cgImage)}Filtros populares do Core Image
CISepiaTone— sépiaCIPhotoEffectMono— efeito preto e brancoCIVignette— vinhetaCIColorControls— brilho, contraste, saturaçãoCICrop— corte de imagem
Trabalhando com imagens no SwiftUI
SwiftUI oferece uma maneira simples e declarativa de trabalhar com imagens:
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) }}