적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Swift iOS 앱 개발/iOS

[Swift iOS] Custom Camera 커스텀 카메라 만들기

hongssup_ 2022. 2. 4. 17:15
반응형

Info.plist에서 Privacy - Camera Usage Description 추가해주기

 

import AVFoundation

 

Define Instance Variables

var captureSession: AVCaptureSession!
var photoOutput: AVCapturePhotoOutput!
var videoPreviewLayer: AVCaptureVideoPreviewLayer!

 

viewDidLoad()

captureSession = AVCaptureSession()
captureSession.beginConfiguration()

guard let captureDevice = AVCaptureDevice.default(for: AVMediaType.video) else { return }

do {
    let cameraInput = try AVCaptureDeviceInput(device: captureDevice)
    
    photoOutput = AVCapturePhotoOutput()
    
    captureSession.addInput(cameraInput)
    captureSession.sessionPreset = .photo
    captureSession.addOutput(photoOutput)
    captureSession.commitConfiguration()
} catch {
    print(error)
}

//preview
videoPreviewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
DispatchQueue.main.async {
    self.videoPreviewLayer.frame = self.previewView.bounds
}
videoPreviewLayer?.videoGravity = .resizeAspectFill
self.previewView.layer.addSublayer(videoPreviewLayer)

captureSession.startRunning()

self.videoPreviewLayer.frame = self.previewView.bounds 

videoPreviewLayer 화면을 비동기로 설정해주지 않으면 위치가 좀 이상하게 뜨더라. 신기행

 

Taking the picture

@IBAction func takePhoto(_ sender: Any) {
    photoOutput?.capturePhoto(with: AVCapturePhotoSettings(), delegate: self as AVCapturePhotoCaptureDelegate)
}

 

Process the captured photo

AVCapturePhotoCaptureDelegate 프로토콜을 추가해준 후 

func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
    guard let imageData = photo.fileDataRepresentation() else { return }
    let image = UIImage(data: imageData)
    // 이미지뷰에 이미지 설정
}

 

 

 

참고 : CODEPATH - Creating a Custom Camera View,

728x90
반응형