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를 함께 사용하려면 다음과 같은 단계를 따릅니다.

  1. CIImage를 생성하여 Core Image 프레임워크에서 사용할 이미지 데이터를 만듭니다.
  2. CIFilter 객체를 생성하여 원하는 필터 효과를 적용합니다.
  3. CIContext 객체를 사용하여 필터링된 이미지를 렌더링하고, 최종적으로 UIImage로 변환합니다.

여기에서는 기본적인 흑백 필터 적용 예제를 살펴보겠습니다.

기본 예제: 흑백 필터 적용하기

1. 프로젝트 설정

먼저 Xcode에서 새로운 Single View App 프로젝트를 생성합니다. Swift를 선택하고 프로젝트 이름을 적절히 설정합니다.

2. Core Image 임포트 및 이미지 뷰 추가

ViewController.swift 파일을 열고 다음과 같이 Core Image를 임포트합니다.

swift
import 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에는 다양한 내장 필터가 있습니다. 몇 가지 필터의 코드를 살펴보겠습니다.

색상 반전 필터

swift
func 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
    }
}

세피아 톤 필터

swift
func 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는 다양한 필터와 이미지 처리 기능을 제공하여, 복잡한 작업도 쉽게 처리할 수 있습니다. 본문에 소개된 예제를 바탕으로, 다양한 필터와 기능을 탐구해보길 바랍니다.