일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- Git
- 글또
- PushNotification
- Animation
- escaping
- SWIFTUI
- NotificationCenter
- Refresh
- http
- apns
- segue
- 화면전환
- CoreImage
- mvvm
- list
- struct
- error
- IOS
- ScrollView
- array
- class
- uikit
- Switch
- Observer
- singleton
- self
- 고차함수
- viewlifecycle
- SWIFT
- calendar
- Today
- Total
seong_hye, the developer
Swift) CoreImage에 대해서 알아보자 본문
📘 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 컨텍스트를 사용하는 것이 좋음
필터 체인을 효율저긍로 구성하여 불필요한 중간 렌더링을 피해야 함
'IOS' 카테고리의 다른 글
Swift) UIImage vs CGImage에 대해 알아보기 (0) | 2025.09.04 |
---|---|
Swift) 번역 기능 (0) | 2025.08.21 |
Swift) .DS_Store에 대해 알아보기 (0) | 2025.01.08 |
iOS) 클래스(Class) vs 구조체(Struct) 제대로 알아보기 (0) | 2024.03.27 |
iOS) SwiftLint는 무엇일까? (0) | 2024.03.17 |