[swift] Swift Device의 사진 및 동영상 편집 기능

이번 포스트에서는 Swift를 사용하여 iOS 기기에서 사진과 동영상을 편집하는 방법에 대해 알아보겠습니다.

사진 편집

iOS 기기에서 사진을 편집하기 위해 UIImagePickerController를 사용할 수 있습니다. 아래의 코드는 이미지 피커 컨트롤러를 열고 사용자가 이미지를 선택하면 선택한 이미지를 편집하는 방법을 보여줍니다.

import UIKit

class ViewController: UIViewController, UIImagePickerControllerDelegate & UINavigationControllerDelegate {
    
    let imagePicker = UIImagePickerController()

    override func viewDidLoad() {
        super.viewDidLoad()
        
        imagePicker.delegate = self
    }
    
    func openImagePicker() {
        if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
            imagePicker.sourceType = .photoLibrary
            imagePicker.allowsEditing = true
            present(imagePicker, animated: true, completion: nil)
        }
    }
    
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let editedImage = info[.editedImage] as? UIImage {
            // 선택한 이미지를 편집한 후에 할 작업
        }
        
        picker.dismiss(animated: true, completion: nil)
    }
}

사진 편집을 위해 .allowsEditing 속성을 true로 설정하고, 사용자가 편집한 이미지를 얻기 위해 didFinishPickingMediaWithInfo 메서드를 사용합니다.

동영상 편집

iOS 기기에서 동영상을 편집하기 위해 AVFoundation 프레임워크를 사용할 수 있습니다. 아래의 코드는 동영상을 편집하고 저장하는 방법을 보여줍니다.

import UIKit
import AVFoundation

class ViewController: UIViewController {

    var videoURL: URL?
    
    func openCamera() {
        if UIImagePickerController.isSourceTypeAvailable(.camera) {
            let cameraPicker = UIImagePickerController()
            cameraPicker.sourceType = .camera
            cameraPicker.mediaTypes = [kUTTypeMovie as String]
            cameraPicker.delegate = self
            present(cameraPicker, animated: true, completion: nil)
        }
    }
    
    func videoEditing() {
        if let videoURL = videoURL {
            let asset = AVURLAsset(url: videoURL)
            let composition = AVMutableComposition()
            
            let videoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
            let audioTrack = composition.addMutableTrack(withMediaType: .audio, preferredTrackID: kCMPersistentTrackID_Invalid)
            
            if let assetTrack = asset.tracks(withMediaType: .video).first {
                try? videoTrack?.insertTimeRange(CMTimeRange(start: CMTime.zero, duration: assetTrack.timeRange.duration), of: assetTrack, at: CMTime.zero)
            }
            
            if let assetTrack = asset.tracks(withMediaType: .audio).first {
                try? audioTrack?.insertTimeRange(CMTimeRange(start: CMTime.zero, duration: assetTrack.timeRange.duration), of: assetTrack, at: CMTime.zero)
            }
            
            // 동영상 편집 작업 수행
            
            let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetHighestQuality)
            let outputPath = NSTemporaryDirectory() + "editedVideo.mov"
            exportSession?.outputURL = URL(fileURLWithPath: outputPath)
            exportSession?.outputFileType = .mov

            exportSession?.exportAsynchronously(completionHandler: {
                // 편집된 동영상을 저장한 후에 할 작업
            })
        }
    }
}

동영상을 편집하기 위해 AVURLAssetAVMutableComposition을 사용합니다. AVMutableComposition 객체를 생성한 뒤에 AVMutableCompositionTrack을 추가하여 원하는 편집 작업을 수행할 수 있습니다.

동영상을 저장하기 위해 AVAssetExportSession을 사용하고, 편집된 동영상을 원하는 경로에 저장한 뒤에 추가 작업을 수행할 수 있습니다.

위의 코드는 사진과 동영상의 간단한 편집 작업에 대한 예제입니다. 실제 애플리케이션에서는 더 복잡한 편집 작업을 수행할 수 있습니다. ```