-
고해상도 사진 촬영 기능 구현하기
AVFoundation을 사용하여 앱에서 초고해상도 사진을 촬영하세요. RAW, 노출 범위 지정, 완전 처리 등 세 가지 옵션을 사용하여 이미지를 촬영해야 하는 경우를 알아보세요. 메인, 망원 및 울트라 와이드 카메라 전반에서 24MP 및 48MP 이미지 사진 촬영을 구성하는 방법을 안내합니다. 또한 지연 사진 처리 기능을 사용하여 더 많은 사진을 촬영하면서 앱의 반응성을 유지하는 방법을 살펴보세요.
챕터
- 0:00 - Introduction
- 0:52 - High-resolution photos
- 4:07 - Types of captures
- 5:20 - Configure a capture session
- 9:41 - Responsive capture best practices
리소스
관련 비디오
WWDC26
WWDC23
WWDC21
-
비디오 검색…
안녕하세요, 저는 Mohit Setia입니다 카메라 소프트웨어 팀 엔지니어입니다 "고해상도 사진 캡처 구현"을 시작하겠습니다 카메라 하드웨어와 컴퓨테이셔널 포토그래피의 발전으로 고해상도 캡처가 가능해졌습니다 하지만 이 품질을 최대한 활용하려면 트레이드오프를 관리해야 합니다 특히 처리 시간과 최종 이미지 품질 간의 균형에서요 고품질 사진 처리에 대해 알아보겠습니다 그리고 앱에서 이러한 트레이드오프를 관리하는 방법도 다룹니다 먼저 다양한 종류의 고해상도 사진을 살펴봅니다
다음으로 구성 및 캡처 방법을 알아봅니다 마지막으로, 앱 응답성을 유지하는 방법을 설명합니다 첫 번째로, 고해상도 사진입니다 프리뷰 스트림은 화면 해상도 이미지를 제공합니다 카메라 화면을 표시하는 데 적합합니다 하지만 사진 촬영에서는 더 높은 디테일과 낮은 노이즈가 필요합니다
또한 사진 자르기를 위해서는 고해상도 이미지가 필요합니다 세부 확대나 이미지 분석에도 고해상도가 필요합니다 고해상도 캡처가 이를 해결합니다 이에 대해 설명해 드리겠습니다 고해상도 사진, 일반적으로 12메가픽셀은 프리뷰 스트림보다 높은 해상도로 장면을 캡처합니다
24메가픽셀과 48메가픽셀은 한 단계 더 나아갑니다 카메라가 더 높은 해상도로 이미지를 캡처합니다 훨씬 더 많은 디테일과 선명도를 제공합니다 iPhone 14 Pro와 iPhone 14 Pro Max부터 카메라 시스템에 48메가픽셀 쿼드 센서가 탑재되었습니다 쿼드픽셀 센서 설계는 전체 해상도로 사진을 캡처할 수 있게 합니다 최고 수준의 디테일로 또는 같은 색상의 픽셀을 2x2로 묶어 더 많은 빛을 캡처합니다 iPhone으로 촬영한 48메가픽셀 사진입니다! 탁 트인 해안 풍경이 담겨 있습니다 절벽, 해변, 수평선까지 뻗어 있는 바다를 볼 수 있습니다 일반 사진의 4배 해상도로 센서의 단일 프레임으로 캡처됩니다 해안을 100%로 확대하면 작은 바위들을 볼 수 있습니다 놀라운 디테일로 선명하게 보입니다 그리고 산 옆면의 세밀한 패턴도 확인할 수 있습니다 이것이 48메가픽셀의 힘입니다 더 많은 디테일, 더 뛰어난 선명도 더 넓은 탐구 가능성 iPhone 15부터 카메라가 24메가픽셀 사진을 지원합니다 24메가픽셀 사진 캡처는 여러 단계로 이루어집니다 먼저 카메라가 쿼드 센서의 결합된 픽셀을 사용합니다 12메가픽셀, 멀티 프레임 융합 HDR 이미지를 생성합니다 그런 다음, Photonic Engine이라는 계산 이미지 처리 파이프라인이 이를 48MP 고해상도 이미지와 결합합니다 풍부한 디테일을 위해 전체 센서 해상도로 캡처된 이미지와요
결과물은 놀라운 품질의 24MP 이미지입니다 12MP 이미지의 두 배 해상도로 파일 크기는 약 50%만 증가합니다 빛과 디테일의 균형을 맞추면서 저장 및 공유에 적합한 파일 크기를 유지합니다 iPhone 15부터 카메라 앱의 기본 캡처 모드가 됩니다 24MP와 48MP 캡처 지원이 확장되었습니다 iPhone 16 Pro 망원 카메라와 iPhone 17 초광각 카메라로요 iPhone 카메라에서 사용 가능한 고해상도 사진 유형을 살펴봤습니다 iPhone에서 사용 가능한 고해상도 사진을 정의했으니 앱에서 요청 가능한 고해상도 캡처 유형을 알아봅니다 첫 번째는 가장 일반적인 경우인 완전히 처리된 사진입니다 멀티 프레임 융합 이미지입니다 Photonic Engine을 거치며 다이나믹 레인지를 확장하고 세밀한 디테일을 향상시킵니다
두 번째는 노출 브래킷입니다 동일한 장면의 여러 노출 프레임입니다 HDR 사진 캡처를 만들 때 유용합니다 여러 노출 중 선택이 필요한 경우에도 활용됩니다 세 번째는 Bayer RAW 사진입니다 RAW는 센서에서 바로 얻은 최소 처리 데이터를 제공합니다 후처리 및 편집에 이상적입니다 네 번째는 Apple의 ProRAW입니다 ProRAW는 RAW의 유연성과 iPhone 이미지 처리를 결합합니다 노출, 색상, 디테일 편집 시 더 많은 유연성을 제공합니다 RAW 형식에 대해 더 알아보려면 WWDC 2021의 "Capture and process ProRAW images"를 시청하세요 다음으로, 공유해 드릴 내용은 고해상도 사진을 위한 캡처 세션 구성 방법입니다 AVCaptureSession 생성부터 시작하겠습니다 그런 다음 세션을 구성합니다
참고로, photo 프리셋만 24, 48메가픽셀 사진을 지원합니다 다른 프리셋은 지원하지 않습니다 다음으로, 앱에 맞는 우선순위를 선택합니다 속도 캡처는 가장 빠르게 최소한의 처리로 전달합니다 균형 캡처는 중간 속도와 좋은 품질을 제공합니다 품질 캡처는 가장 오래 걸리지만 최고 품질을 제공합니다 더 자세한 내용은 WWDC 2021의 "Capture High-Quality Photos Using Video Formats"를 보세요 AVCapturePhotoOutput 구성 시 maxPhotoQualityPrioritization을 고해상도 캡처 시연을 위해 quality로 설정합니다 세 가지 우선순위 수준 모두를 위한 리소스를 준비하도록 세션에 알립니다 speed, balanced, 그리고 quality 일부 고해상도의 사용 가능 여부는 이 설정에 따라 달라집니다 이 부분은 나중에 자세히 다루겠습니다 다음으로, 이 세션에서 요청할 가장 큰 치수를 선택합니다
iOS 16부터 지원되는 최대 사진 치수를 확인할 수 있습니다 기기의 활성 포맷에서요 supportedMaxPhotoDimensions에는 현재 포맷에서 가능한 모든 사진 치수가 나열됩니다 여기서는 시연을 위해 사용 가능한 가장 큰 치수를 선택합니다 하지만 사용 사례에 맞는 치수를 선택하세요
세션 구성을 커밋하기 전에 사진 출력 구성을 완료하세요
커밋 후 설정을 변경하면 긴 파이프라인 재구성이 발생합니다
캡처 준비가 되면 maxPhotoDimensions와 photoQualityPrioritization을 설정합니다 현재 캡처를 위한 AVCapturePhotoSettings에서요 그런 다음 사진 캡처를 위한 델리게이트를 설정합니다 maxPhotoDimensions 설정은 요청이지 보장이 아닙니다 시스템은 빛의 강도, 장면, 사용 가능한 처리 환경을 고려합니다 최적의 경로를 선택합니다 실제 치수는 AVCaptureResolvedSettings를 통해 델리게이트로 전달됩니다 캡처 완료 시 델리게이트에도 알립니다 각 캡처마다 품질 우선순위와 maxPhotoDimensions를 맞춤 설정할 수 있습니다 여러 품질 수준을 지원할 수 있습니다 그리고 동일 세션 내에서 다양한 치수도요 캡처 간 긴 재구성 없이도 가능합니다 고해상도 캡처에는 특정 리소스 할당이 필요합니다 photoQualityPrioritization과 maxPhotoDimensions에 따라 시스템이 이 리소스를 미리 할당하지 않은 경우 캡처 시점에 할당이 발생해 속도가 느려질 수 있습니다 이 지연을 피하려면 setPreparedPhotoSettingsArray를 사용하세요 AVCapturePhotoOutput에서 향후 사진 캡처 방식을 알립니다
예를 들어, 앱에 48메가픽셀 모드가 있다면 해당 모드가 활성화되는 즉시 setPreparedPhotoSettingsArray를 호출하세요 캡처 전에 리소스가 준비됩니다 구현 방법은 다음과 같습니다 가능한 빨리 prepareSettings 오브젝트를 생성하세요
적절한 maxPhotoDimensions와 photoQualityPrioritization을 설정하세요
그런 다음 setPreparedPhotoSettingsArray를 호출합니다 이후 캡처 준비가 되면 prepareSettings 구성에 맞는 새 captureSettings 오브젝트를 생성하세요
prepareSettings 오브젝트는 재사용할 수 없습니다 실제 캡처에
새 settings 오브젝트를 생성하되 구성이 일치하는지 확인하세요 미리 할당된 리소스와 캡처가 일치하도록요 고해상도 사진 캡처에는 많은 픽셀 처리가 필요합니다
처리에 수 초가 걸릴 수 있습니다 이제 몇 가지 모범 사례를 공유해 드리겠습니다 처리 과정에서 앱이 빠르고 응답성을 유지하도록요 사진을 요청하면 먼저 캡처 단계를 거칩니다 그런 다음 처리 단계로 이동합니다 AVCapturePhotoCaptureDelegate는 이 과정 전반에서 알림을 받습니다 예를 들어, didCapturePhotoFor resolvedSettings와 didFinishCaptureFor resolvedSettings가 처리가 진행되는 동안 앱을 최신 상태로 유지합니다 처리 시간은 다를 수 있습니다 선택한 사진 품질 우선순위에 따라 quality 우선순위로 찍은 사진은 최상의 이미지로 전달됩니다 더 긴 처리 시간을 활용해서 Balance 우선순위로 찍은 사진은 최적의 품질을 제공합니다 일반적인 경우에 적절한 처리 시간으로요 Speed 우선순위로 찍은 사진은 가장 빠르게 캡처를 얻는 방법입니다 다만 더 긴 처리 시간으로 얻는 향상된 품질은 없습니다
세 가지 우선순위 수준 모두에서 12메가픽셀을 캡처할 수 있습니다
앞서 설명했듯이 48메가픽셀 이미지는 단일 프레임이므로 balanced 또는 quality 우선순위에서 사용 가능합니다 18메가픽셀과 24메가픽셀은 멀티 프레임 융합 이미지입니다 처리 시간이 더 길어 quality 우선순위에서만 가능합니다 표에 있는 18메가픽셀은 iPhone 17의 Center Stage 전면 카메라에서만 사용 가능합니다 Center Stage 전면 카메라에 대해 더 알아보려면 WWDC 2026의 "Support Center Stage front camera in your iOS app"을 보세요 AVCaptureResolvedSettings에 photoProcessingTimeRange 속성이 있습니다 사진이 델리게이트에 전달되기까지 예상 시간을 알려줍니다 다음 사진은 이전 사진의 처리가 완료된 후에만 캡처할 수 있습니다 두 캡처 사이의 이 지연을 shot-to-shot 딜레이라고 합니다 AVCapturePhotoOutput에서 responsive capture를 활성화하면 캡처를 겹쳐서 진행할 수 있습니다 이전 사진의 캡처 단계가 끝나면 새 캡처를 시작할 수 있습니다 처리 완료를 기다릴 필요가 없습니다 AVCapturePhotoOutput의 captureReadiness 속성을 관찰하세요 다음 사진을 캡처할 수 있는 시점을 파악할 수 있습니다 두 번째 사진의 shot-to-shot 딜레이를 줄입니다 소중한 순간을 놓치지 않도록 도와줍니다 하지만 각 사진은 여전히 이전과 같은 처리 시간이 걸립니다 고품질 캡처의 shot-to-shot 딜레이를 더욱 줄이려면 지연 사진 처리를 채택하세요 지연 처리를 활성화하면 캡처 직후 시스템이 가볍게 처리된 프록시 사진을 즉시 전달합니다 didFinishCapturingDeferredPhotoProxy를 통해 받습니다 델리게이트 콜백으로 최종 사진 처리는 두 가지 방식 중 하나로 이루어집니다 사진 보관함에서 최종 사진을 요청하는 온디맨드 방식 또는 시스템이 조건이 좋다고 판단할 때 백그라운드에서 기기가 유휴 상태일 때와 같이 WWDC23의 "Create a More Responsive Camera Experience"를 시청하세요 지연 사진 처리에 대해 자세히 알아보세요 지연 사진 처리를 활성화하면 응답성이 크게 향상됩니다 다음 캡처를 차단하는 처리 시간을 줄여주기 때문입니다
이렇게 하면 이후 모든 사진의 shot-to-shot 딜레이가 더욱 줄어듭니다
이제 더 짧은 시간에 더 많은 고품질 사진을 캡처할 수 있습니다
이 방식을 사용하면 처리 단계에 소요되는 시간이 크게 줄어듭니다 캡처 단계는 동일하게 유지됩니다 지연 처리를 통해 시스템이 더 오래 사진을 처리할 수 있습니다 다음 캡처를 차단하지 않고서도 그 작업이 백그라운드에서 이루어지기 때문에 캡처 세션과 메모리를 공유하지 않습니다 이것이 멀티 프레임 융합 캡처를 가능하게 합니다 18메가픽셀과 24메가픽셀처럼요
응답성을 더욱 높이려면 AVCapturePhotoOutput의 fast capture prioritization 속성을 켜세요 photoOutput에서 fast capture prioritization을 켜면 시스템이 연속으로 여러 번 캡처하는 상황을 감지합니다
그런 다음 최고 quality 설정에서 사진 품질을 조정합니다 balanced quality 설정으로 사진 캡처 타임라인에서 빠른 캡처를 요청하면 시스템이 사진 품질 우선순위를 balanced로 동적으로 조정합니다 Balanced 캡처는 캡처와 처리 모두에 더 적은 시간이 필요합니다
빠른 캡처 시 속도가 향상되는 결과를 얻습니다 iOS 27부터 iPhone 16과 iPhone 17에서 시스템이 balanced 빠른 캡처도 나중에 지연 처리로 처리합니다 처리 시간이 더욱 최소화됩니다 훨씬 오랫동안 더 빠른 캡처 경험을 제공합니다 이를 설명하기 위해 카메라 팀 멤버들 간의 매우 치열한 공 경기를 취재 중입니다 화면에는 액션이 펼쳐지는 농구 코트가 보입니다 처음에는 지연 처리 없이 시작합니다 Responsive Shutter나 Fast Capture Prioritization도 없이 농구 슛을 촬영하려 할 때 캡처 버튼을 주목하세요
사진을 처리하는 동안 계속 돌아갑니다 다음 촬영을 할 수 없습니다 결국 슛 사진 한 장만 남게 됩니다 하지만 원하는 순간을 더 잘 포착할 수 있습니다 API를 사용해 응답성을 관리하면서요
다음 슛을 위해 지연 처리, Responsive Shutter, Fast Capture를 활성화합니다
이번에는 캡처 버튼이 응답성을 유지합니다 최고의 순간을 포착하는 동안
캡처 버튼을 누르면 AVCaptureSession이 Quality 사진 캡처를 시작합니다 하지만 계속하다 보면 빠른 캡처를 감지하고 지능적으로 Balanced 캡처로 전환합니다
차이가 눈에 띕니다 차단된 캡처 1장 대 동일 순간의 응답성 있는 샷 5장의 차이입니다 훨씬 더 뛰어난 응답성의 캡처 경험을 만들 수 있습니다 응답성 있는 사진 캡처 앱을 빌드하는 모범 사례를 공유했습니다 최고 품질과 해상도로 사진을 캡처하는 앱이요 사진 캡처 앱을 빌드한다면 원하는 해상도를 먼저 파악하세요 24메가픽셀이나 48메가픽셀 같은 고해상도는 자르기, 확대, 탐색에 더 많은 디테일을 제공하지만 더 많은 메모리와 처리 시간이 필요합니다 필요에 맞는 품질 우선순위를 선택하세요 speed, balanced, quality는 각각 전달 시간과 이미지 품질을 조율합니다 앱의 요구 사항에 맞는 수준을 선택하세요 그리고 최고 품질의 캡처가 필요하다면 지연 처리와 응답성 있는 캡처를 켜세요 이를 사용하지 않으면 각 사진이 다음 촬영을 차단합니다 앱 사용자들이 다시 오지 않을 순간을 놓칠 수도 있습니다 카메라 앱을 더 최적화하려면 다음 영상을 시청하세요 WWDC 2026의 "Build a responsive camera app that launches quickly"를 보세요 필요할 때는 빠르고 응답성 있는 카메라 경험을 만드세요 그리고 품질이 중요할 때는 타협하지 마세요 시청해 주셔서 감사합니다
-
-
5:26 - Configure the AVCaptureSession
import AVFoundation private let session = AVCaptureSession() private func configureSession() { session.beginConfiguration() session.sessionPreset = .photo } -
6:11 - Configure AVCapturePhotoOutput
import AVFoundation private let photoOutput = AVCapturePhotoOutput() private let configurePhotoOutput: () -> Void = { photoOutput.maxPhotoQualityPrioritization = .quality // or .balanced } -
6:38 - Add maxPhotoDimensions to AVCapturePhotoOutput
import AVFoundation let supportedMaxPhotoDimensions = device?.activeFormat.supportedMaxPhotoDimensions ?? [] if let largestDimension = supportedMaxPhotoDimensions.max(by: { lhs, rhs in Int(lhs.width) * Int(lhs.height) < Int(rhs.width) * Int(rhs.height) } ) { photoOutput?.maxPhotoDimensions = largestDimension } session?.commitConfiguration() session?.startRunning() -
7:21 - Update AVCapturePhotoSettings
import AVFoundation let settings = AVCapturePhotoSettings() settings.maxPhotoDimensions = dimension.cmVideoDimensionsValue settings.photoQualityPrioritization = .quality var delegate: AVCapturePhotoCaptureDelegate? // Configure photo request delegate if let delegate { photoOutput?.capturePhoto(with: settings, delegate: delegate) } -
8:59 - Prepare resources for the capture
import AVFoundation let prepareSettings = AVCapturePhotoSettings() prepareSettings.maxPhotoDimensions = photoOutput.maxPhotoDimensions prepareSettings.photoQualityPrioritization = .quality photoOutput.setPreparedPhotoSettingsArray([prepareSettings]) { prepared, error in if let error = error { print("Failed to prepare: \(error)") return } print("Pipeline prepared: \(prepared)") } // Later, when ready to capture — create NEW settings let captureSettings = AVCapturePhotoSettings() captureSettings.maxPhotoDimensions = photoOutput.maxPhotoDimensions captureSettings.photoQualityPrioritization = quality photoOutput.capturePhoto(with: captureSettings, delegate: self)
-
-
- 0:00 - Introduction
The tradeoffs high-resolution photo capture requires — particularly between processing time and image quality — and what the session covers: photo types, configuring and capturing them, and keeping your app responsive.
- 0:52 - High-resolution photos
Explore the different photo resolutions available across iPhone cameras, including 12MP, 24MP, and 48MP, and how the photonic engine balances light and detail.
- 4:07 - Types of captures
Learn about the four types of high resolution captures you can request: fully processed photos, exposure brackets, Bayer RAW, and Apple ProRAW.
- 5:20 - Configure a capture session
An overview of AVCaptureSession setup for high resolution photos. Learn how to select quality prioritization, configure maximum photo dimensions, and preallocate resources.
- 9:41 - Responsive capture best practices
Keep your app fast and responsive by implementing overlapping captures, deferred photo processing, and fast capture prioritization to minimize shot-to-shot delay.