UIKit에서 Core Image 사용하기: 이미지 처리 및 필터 적용
UIKit에서 Core Image 사용하기: 이미지 처리 및 필터 적용
소개
Swift를 사용하여 앱 개발을 진행하는 과정에서 이미지 처리 및 필터 적용은 자주 필요한 기능 중 하나입니다. 애플의 Core Image 프레임워크는 이와 같은 이미지 처리 작업을 강력하고 유연하게 수행할 수 있는 도구를 제공합니다. 이 글에서는 UIKit과 Core Image를 활용해 이미지에 다양한 필터를 적용하는 방법을 알아보겠습니다.
Core Image란?
Core Image는 애플이 제공하는 강력한 이미지 처리 및 분석 프레임워크입니다. 이 프레임워크는 다양한 내장 필터와 이미지 처리 기능을 제공하여 컴퓨터 비전 및 그래픽 관련 작업을 쉽게 수행할 수 있게 해줍니다. Core Image는 기본적으로 CPU와 GPU를 활용하여 고속 이미지 처리를 지원하므로, 성능적인 면에서도 매우 우수합니다.
Core Image는 간단한 인터페이스를 통해 필터 체인을 구성하고, 이를 사용하여 이미지를 변형하거나 분석할 수 있습니다. CIImage, CIFilter, CIContext와 같은 핵심 클래스를 통해 이미지를 편리하게 처리할 수 있습니다.
시작하기
UIKit과 Core Image를 함께 사용하려면 다음과 같은 단계를 따릅니다.
- CIImage를 생성하여 Core Image 프레임워크에서 사용할 이미지 데이터를 만듭니다.
- CIFilter 객체를 생성하여 원하는 필터 효과를 적용합니다.
- CIContext 객체를 사용하여 필터링된 이미지를 렌더링하고, 최종적으로 UIImage로 변환합니다.
여기에서는 기본적인 흑백 필터 적용 예제를 살펴보겠습니다.
기본 예제: 흑백 필터 적용하기
1. 프로젝트 설정
먼저 Xcode에서 새로운 Single View App 프로젝트를 생성합니다. Swift를 선택하고 프로젝트 이름을 적절히 설정합니다.
2. Core Image 임포트 및 이미지 뷰 추가
ViewController.swift 파일을 열고 다음과 같이 Core Image를 임포트합니다.
swiftimport UIKit import CoreImage class ViewController: UIViewController { @IBOutlet weak var imageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() applyBlackWhiteFilter() } func applyBlackWhiteFilter() { guard let inputImage = UIImage(named: "example.jpg")?.cgImage else { return } let ciImage = CIImage(cgImage: inputImage) let filter = CIFilter(name: "CIPhotoEffectMono")! filter.setValue(ciImage, forKey: kCIInputImageKey) let context = CIContext() if let outputImage = filter.outputImage, let cgImage = context.createCGImage(outputImage, from: outputImage.extent) { let filteredImage = UIImage(cgImage: cgImage) imageView.image = filteredImage } } }
3. 인터페이스 빌더 설정
스토리보드를 열고 UIImageView를 뷰 컨트롤러의 뷰에 추가합니다. 그리고 imageView
아웃렛을 연결합니다. 이미지를 표시할 UIImageView의 크기와 위치를 적절히 조정하세요.
4. 필터 설명
위 코드에서 applyBlackWhiteFilter
메서드는 다음 작업을 수행합니다:
- 예제 이미지를
UIImage
에서CIImage
로 변환합니다. 이는 Core Image 필터에서 사용할 수 있는 형식입니다. - CIFilter 객체를 생성하고, 흑백 필터(
CIPhotoEffectMono
)를 적용합니다. - 필터가 처리된 이미지를 렌더링하기 위해 CIContext 객체를 사용합니다.
- 최종 결과를 UIImage로 변환하여 이미지 뷰에 설정합니다.
다른 필터 적용하기
Core Image에는 다양한 내장 필터가 있습니다. 몇 가지 필터의 코드를 살펴보겠습니다.
색상 반전 필터
swiftfunc applyColorInvertFilter() { guard let inputImage = UIImage(named: "example.jpg")?.cgImage else { return } let ciImage = CIImage(cgImage: inputImage) let filter = CIFilter(name: "CIColorInvert")! filter.setValue(ciImage, forKey: kCIInputImageKey) let context = CIContext() if let outputImage = filter.outputImage, let cgImage = context.createCGImage(outputImage, from: outputImage.extent) { let filteredImage = UIImage(cgImage: cgImage) imageView.image = filteredImage } }
세피아 톤 필터
swiftfunc applySepiaToneFilter() { guard let inputImage = UIImage(named: "example.jpg")?.cgImage else { return } let ciImage = CIImage(cgImage: inputImage) let filter = CIFilter(name: "CISepiaTone")! filter.setValue(ciImage, forKey: kCIInputImageKey) filter.setValue(0.8, forKey: kCIInputIntensityKey) let context = CIContext() if let outputImage = filter.outputImage, let cgImage = context.createCGImage(outputImage, from: outputImage.extent) { let filteredImage = UIImage(cgImage: cgImage) imageView.image = filteredImage } }
결론
이 글에서는 Swift의 UIKit과 Core Image 프레임워크를 사용하여 이미지에 필터를 적용하는 기본 방법을 살펴보았습니다. Core Image는 다양한 필터와 이미지 처리 기능을 제공하여, 복잡한 작업도 쉽게 처리할 수 있습니다. 본문에 소개된 예제를 바탕으로, 다양한 필터와 기능을 탐구해보길 바랍니다.