[swift] Swift에서 카메라에서 이미지 회전하기

iOS 앱을 개발할 때, UIImage를 캡처한 후에 알맞은 방향으로 이미지를 회전시키는 것은 중요한 작업입니다. 특히, 카메라에서 이미지를 캡처한 후에 이미지의 회전 방향을 고려해야 합니다. 이번 글에서는 AVCapturePhotoOutput를 사용하여 카메라에서 이미지를 캡처한 후에, 이미지를 올바른 방향으로 회전시키는 방법에 대해 설명하겠습니다.

카메라에서 이미지 캡처하기

먼저, AVCapturePhotoOutput를 사용하여 카메라에서 이미지를 캡처합니다. 아래는 이미지를 캡처하는 코드 예시입니다.

// AVCapturePhotoOutput을 사용하여 이미지 캡처
let photoOutput = AVCapturePhotoOutput()

// 이미지 캡처 세션 구성
let captureSession = AVCaptureSession()
// captureSession 설정 및 시작

이미지 회전하기

이미지를 캡처한 후에, 이미지의 회전을 처리해야 합니다. UIImageorientation 속성을 사용하여 이미지를 올바른 방향으로 회전시킬 수 있습니다.

// 이미지 회전 (예시: 90도 회전)
let rotatedImage = capturedImage.rotate(radians: .pi/2)

rotate(radians:) 메서드는 이미지를 주어진 라디안 각도에 따라 회전시키는데 사용됩니다.

완전한 이미지 처리

다음은 이미지를 캡처하고 회전하는 전체적인 코드입니다.

func captureOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) {
    // 이미지 캡처
    guard let imageData = photo.fileDataRepresentation(),
          let image = UIImage(data: imageData) else { return }
    
    // 이미지 회전 (예시: 90도 회전)
    let rotatedImage = image.rotate(radians: .pi/2)
    
    // 회전한 이미지 사용
    // ...
}

extension UIImage {
    func rotate(radians: Float) -> UIImage? {
        var newSize = CGRect(origin: .zero, size: size)
            .applying(CGAffineTransform(rotationAngle: CGFloat(radians)))
            .integral.size
        newSize.width = floor(newSize.width)
        newSize.height = floor(newSize.height)

        UIGraphicsBeginImageContextWithOptions(newSize, false, scale)
        defer { UIGraphicsEndImageContext() }
        if let context = UIGraphicsGetCurrentContext() {
            context.translateBy(x: newSize.width / 2, y: newSize.height / 2)
            context.rotate(by: CGFloat(radians))
            draw(in: CGRect(x: -size.width / 2, y: -size.height / 2, width: size.width, height: size.height))
            if let newImage = UIGraphicsGetImageFromCurrentImageContext() {
                return newImage
            }
        }
        return nil
    }
}

이제 AVCapturePhotoOutput로 이미지를 캡처하고, 올바른 방향으로 이미지를 회전시킬 수 있습니다.

결론

Swift에서 AVCapturePhotoOutput을 사용하여 카메라에서 이미지를 캡처한 후에 이미지를 회전시키는 방법을 살펴보았습니다. UIImageorientation 속성을 활용하여 이미지를 올바른 방향으로 회전시킬 수 있으며, 이는 사용자에게 더 나은 이미지 경험을 제공합니다.

참고 자료