seong_hye, the developer

Swift) CoreImage에 대해서 알아보자 본문

IOS

Swift) CoreImage에 대해서 알아보자

seong_hye 2025. 8. 12.

 

📘 CoreImage

Apple에서 제공하는 고성능 이미지 처리 프레임워크

사진 필터, 얼굴 인식, 블러, 색 조절, 합성, 실시간 영상 처리 등에 최적화 되어 있음

2012년 iOS 5부터 도입되어 현재까지 지속적으로 발전해온 Apple의 핵심 이미지 처리 기술


🔹 기본 정보

항목 내용
프레임워크 이름 CoreImage.framework
플랫폼 iOS/macOS/tvOS/watchOS
주요 구성요소 CIImage, CIFilter, CIContext, CIVector, CIFaceFeature ...
GPU 가속 Metal / OpenGL / GPU 기반 렌더링 지원
실시간 처리 실시간 카메라 필터, 비디오 처리 가능

 

GPU 가속을 통해 고성능 이미지 처리를 제공하며 100개 이상의 내장 필터를 포함하고 있음

Metal과 OpenGL을 기반으로 하여 실시간 이미지 처리가 가능하고

필터 체인을 구성해 복합적인 효과를 적용할 수 있음


🔹 핵심 구성 요소

CIImage

let ciImage = CIImage(image: exampleImage)

CoreImage의 기본 이미지 객체로 필터를 적용할 원본 이미지

실제 픽셀 데이터가 아닌 이미지 레시피를 나타냄

지연 평가 방시긍로 작동하여 메모리 효율적

UIImage, CGImage, URL, CVPixelBuffer 등에서 생성 가능

 

CIFilter

let filter = CIFilter(name: "CISepiaTone")
filter?.setValue(ciImage, forKey: kCIInputImageKey)
filter?.setValue(0.8, forKey: kCIInputIntensityKey)

이미지에 적용할 효과(필터) 또는 변환을 정의하는 객체

블러, 색상 조절, 기하학적 변환 등 다양한 종류가 있음

이름 기반으로 생성 (CIFilter(name: "CIColorControls"))

파라미터 설정 후 .outputImage로 결과 추출

 

CIContext

let context = CIContext()
let cgImage = context.createCGImage(outputCIImage, from: outputCIImage.extent)

실제 이미지 렌더링을 담당하는 객체

필터를 적용한 결과를 렌더링해서 CGImage나 UIImage로 변환

GPU 기반 처리 (Metal or OpenGL) 또는 CPU 기반 설정 가능


🔹 예시

import CoreImage

// 이미지 로드
let inputImage = CIImage(image: UIImage(name: "photo")!)

// 필터 생성
let filter = CIFilter(name: "CIGaussianBlur")!
filter.setVlaue(inputImage, forKey: kCIInputImageKey)
filter.setValue(10.0, forKey: kCIInputRadiusKey)

// 결과 이미지 생성
let outputImage = filter.outputImage!

// 렌더링
let contenxt = CIContext()
let cgImage = context.createCGImage(outputImage, from: outputImage.extent)!
let processedImage = UIImage(cgImage: cgImage)

🔹 특징 및 장점

장점 설명
다양한 필터 기본 내장 + 커스텀 조합 가능
고성능 GPU(Metal/OpenGL) 가속
비파괴적 처리 원본 이미지 변경 없이 필터 체인 구성 가능
실시간 지원 AVCapture와 연동하여 실시간 영상 필터 처리 가능
SwiftUI / AVFoundation과 연동 쉬움  

 

실시간 이미지 처리가 필요한 카메라 앱이나 사진 편집 앱을 개발할 때 매우 유용한 도구

Apple의 하드웨어 최적화 덕분에 뛰어난 성능을 제공하면서도 사용하기 쉬운 API를 제공함


🔹 주의사항

주의사항 설명
CIImage는 렌더링 전까지 실제 픽셀이 없음 UIImage나 CGImage로 변환해줘야 화면 표시 가능
실시간 렌더링 시 성능 이슈 복잡한 필터 체인은 프레임 드랍 발생 가능 ~> Metal로 최적화 필요
일부 필터는 iOS 버전 의존 최신 필터는 iOS 15+ 이상에서만 작동할 수 있음

🔹 메모리 사용은 어떤가?

메모리 관리를 위해 CIContext 재사용

큰 이미지의 경우 적절한 크기로 다운 샘플링 필요

가능한 한 GPU 컨텍스트를 사용하는 것이 좋음

필터 체인을 효율저긍로 구성하여 불필요한 중간 렌더링을 피해야 함


Comments