[swift] Swift 사진 처리

iOS 개발을 하다 보면 사진을 처리해야 할 때가 많습니다. Swift 언어를 사용하여 간단하게 사진 처리를 할 수 있는 방법을 알아보겠습니다.

1. UIImagePickerController를 사용한 사진 선택

먼저, 사용자가 갤러리에서 사진을 선택할 수 있도록 UIImagePickerController를 사용해보겠습니다.

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    @IBOutlet weak var imageView: UIImageView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func selectPhotoButtonPressed(_ sender: UIButton) {
        let imagePickerController = UIImagePickerController()
        imagePickerController.delegate = self
        imagePickerController.sourceType = .photoLibrary
        present(imagePickerController, animated: true, completion: nil)
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            imageView.image = image
        }
        
        dismiss(animated: true, completion: nil)
    }
    
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        dismiss(animated: true, completion: nil)
    }
}

위의 코드는 UIImagePickerController를 사용하여 사용자로부터 갤러리에서 사진을 선택하는 기능을 구현한 것입니다. selectPhotoButtonPressed에서 이미지 선택을 위한 UIImagePickerController를 present 하고, imagePickerController(_:didFinishPickingMediaWithInfo:) 메서드에서 선택한 이미지를 이미지 뷰에 표시합니다.

2. 이미지 필터 적용

선택한 이미지에 필터를 적용해보겠습니다. 이를 위해서는 Core Image 프레임워크를 사용해야 합니다.

import CoreImage

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    // ...
    
    func applyFilterButtonPressed(_ sender: UIButton) {
        if let selectedImage = imageView.image {
            let context = CIContext()
            
            if let filter = CIFilter(name: "CIColorMonochrome") {
                filter.setValue(CIImage(image: selectedImage), forKey: kCIInputImageKey)
                filter.setValue(CIColor(red: 0.5, green: 0.5, blue: 0.5), forKey: kCIInputColorKey)
                filter.setValue(1.0, forKey: kCIInputIntensityKey)
                
                if let outputImage = filter.outputImage {
                    if let cgImage = context.createCGImage(outputImage, from: outputImage.extent) {
                        let processedImage = UIImage(cgImage: cgImage)
                        imageView.image = processedImage
                    }
                }
            }
        }
    }
    
    // ...
}

위의 코드에서 applyFilterButtonPressed 메서드는 선택한 이미지에 필터를 적용하는 기능을 구현한 것입니다. CIColorMonochrome 필터를 사용하여 이미지를 흑백으로 변환하고, CIColor(red: 0.5, green: 0.5, blue: 0.5)를 사용하여 회색으로 설정하였습니다. 결과 이미지는 processedImage에 저장되며, 이를 이미지 뷰에 표시합니다.

3. 이미지 저장

마지막으로, 수정된 이미지를 저장해보겠습니다.

import Photos

class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    
    // ...
    
    func saveImageButtonPressed(_ sender: UIButton) {
        if let processedImage = imageView.image {
            UIImageWriteToSavedPhotosAlbum(processedImage, nil, nil, nil)
        }
    }
    
    // ...
}

위의 코드에서 saveImageButtonPressed 메서드는 수정된 이미지를 포토 라이브러리에 저장하는 기능을 구현한 것입니다. UIImageWriteToSavedPhotosAlbum 함수를 사용하여 이미지를 저장합니다.

결론

이렇게 Swift를 사용하여 사진 처리를 할 수 있습니다. UIImagePickerController를 통해 이미지를 선택하고, Core Image를 사용하여 필터를 적용하며, 저장할 수 있습니다.

더 자세한 내용은 아래의 참고 자료를 참고하시기 바랍니다.

참고 자료