Trabalhando com Imagens em Swift (iOS/macOS)
Trabalhar com imagens é uma das tarefas essenciais no desenvolvimento de aplicativos móveis e desktop. Em Swift para iOS e macOS, existem diversas ferramentas integradas que permitem carregar, exibir, processar e salvar imagens. Neste artigo, abordaremos detalhadamente as principais abordagens e APIs que ajudarão você a trabalhar eficientemente com gráficos nas plataformas Apple.
Classes principais para trabalhar com imagens
Dependendo da plataforma, são utilizadas classes diferentes:
- iOS/tvOS/watchOS —
UIImage(UIKit) - macOS —
NSImage(AppKit)
Ambas as classes oferecem funcionalidades semelhantes, mas possuem diferenças na API. Para desenvolvimento multiplataforma, é possível usar protocolos comuns ou extensões.
Carregamento de imagens
A maneira mais simples é carregar uma imagem dos recursos do aplicativo:
// iOSlet image = UIImage(named: "example")
// macOSlet image = NSImage(named: "example")Para carregar da rede, use 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()Exibição de imagens
Para exibir imagens na tela, são usados os componentes view correspondentes:
- iOS —
UIImageView - macOS —
NSImageView
// iOSlet imageView = UIImageView(image: UIImage(named: "photo"))imageView.contentMode = .scaleAspectFit
// macOSlet imageView = NSImageView(image: NSImage(named: "photo"))imageView.imageScaling = .scaleProportionallyUpOrDownProcessamento de imagens com Core Image
Core Image é um framework poderoso para filtragem e processamento de imagens. Vejamos um exemplo básico de aplicação de filtro:
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}
// Usolet 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!)}Filtros populares do Core Image:
CISepiaTone— sépiaCIGaussianBlur— desfoque gaussianoCIColorControls— ajuste de brilho, contraste e saturaçãoCIVignette— vinheta
Trabalhando com pixels e CGImage
Para manipulação de baixo nível de dados de pixel, use CGImage do 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, Também na biblioteca
Okio para Kotlin: guia completo com exemplos práticos
Aprendizado de Máquina em C# (.NET): Visão Geral de Bibliotecas e Ferramentas
Agendador de tarefas em Node.js: node-cron, node-schedule e Bull
nlohmann/json para C++: guia completo com exemplos
Mongoose para JavaScript (Node.js): guia completo com exemplos