[swift] 이미지 EXIF 데이터 수정하기

EXIF는 디지털 이미지에서 촬영 날짜, 카메라 모델, 조리개 값 등과 같은 메타데이터를 포함하는 포맷입니다. Swift를 사용하여 이미지의 EXIF 데이터를 수정하는 방법에 대해 알아보겠습니다.

1. 이미지 가져오기

먼저, 이미지를 가져와야 합니다. UIImage 객체를 사용하여 이미지를 로드할 수 있습니다.

guard let image = UIImage(named: "image.jpg") else { return }

2. 이미지의 EXIF 데이터 읽기

CGImageSourceCopyPropertiesAtIndex 함수를 사용하여 이미지의 EXIF 데이터를 읽을 수 있습니다.

guard let imageData = image.jpegData(compressionQuality: 1), let imageSource = CGImageSourceCreateWithData(imageData as CFData, nil) else { return }

guard let properties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as? [CFString: Any] else { return }

let exifData = properties[kCGImagePropertyExifDictionary] as? [CFString: Any]

3. EXIF 데이터 수정

수정할 EXIF 키와 값을 결정한 후, CGImageDestinationCopyImageSource 함수를 사용하여 이미지의 속성을 복사한 후 수정된 EXIF 데이터를 설정할 수 있습니다.

let mutableProperties = properties.mutableCopy() as! NSMutableDictionary

let mutableExifData = (exifData ?? [:]).mutableCopy() as! NSMutableDictionary

// EXIF 데이터 수정
mutableExifData[kCGImagePropertyExifDateTimeOriginal] = "2022:01:01 00:00:00"

mutableProperties[kCGImagePropertyExifDictionary] = mutableExifData

guard let imageDestination = CGImageDestinationCreateWithData(imageData as CFMutableData, CGImageSourceGetType(imageSource)!, 1, nil) else { return }

CGImageDestinationAddImageFromSource(imageDestination, imageSource, 0, mutableProperties)
CGImageDestinationFinalize(imageDestination)

4. 수정된 이미지 저장

수정된 이미지를 저장하려면 write(to:options:) 메서드를 사용하여 이미지를 저장할 수 있습니다.

do {
    try imageData.write(to: URL(fileURLWithPath: "modified_image.jpg"))
    print("이미지 저장 성공")
} catch {
    print("이미지 저장 실패: \(error)")
}

참고 자료