-
사진 Exif에서 날짜 데이터 가져오기iOS/Did 2020. 3. 10. 15:09
사진의 create date를 가져와야해서 방법을 찾아보았다.
(다운받은 사진은 뭔가 다른방법이 필요한 것 같다..ㅠ)
원래는 imagePickerController delegate method의 info를 이용하여 다음과 같이 create date를 구할 수 있다.
그런데 phAsset 키가 안보인다...(기존에는 info[UIImagePickerControllerPHAsset] as? PHAsset로 사용했었는데..)
func getCreateDate(by info: [UIImagePickerController.InfoKey : Any]) -> Date? { guard let asset = info[.phAsset] as? PHAsset else { return getExifDate(by: info) } return asset.creationDate }
그래서 그 때는 디지털카메라 이미지파일 포멧인 Exif(EXchangable Image File format)를 사용하여 가져오도록 했다.
다음 코드를 살펴보자.
func getExifDate(by info: [UIImagePickerController.InfoKey : Any]) -> Date? { guard let url = info[.imageURL] as? NSURL else { return nil } // 1 guard let imageSource = CGImageSourceCreateWithURL(url, nil) else { return nil } // 2 let imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, nil) as Dictionary? // 3 let exifDict = imageProperties?[kCGImagePropertyExifDictionary] // 4 guard let dateTimeOriginal = exifDict?[kCGImagePropertyExifDateTimeOriginal] as? String else { // 5 return nil } return Date() }
1. imageURL로 해당 이미지의 위치를 알아오고,
2. 위치를 기반으로 CGImageSource를 얻는다.(CGImageSourceCreateWithURL)
3. 그리고 ImageSource에서 속성 별로 dictionary로 담아둔다.
4. 그 딕셔너리값 중에서 kCGImagePropertyExifDictionary를 키 값으로 가진 것이 구하려고 했던 Exif이다.
5. Exif에서 날짜에 해당하는 kCGImagePropertyExifDateTimeOriginal 키 값을 사용하여 사진의 날짜를 얻어올 수 있다.
반응형'iOS > Did' 카테고리의 다른 글
Error) Unexpected duplicate tasks (0) 2020.03.30 round corner 한쪽 모서리만 설정하기 (0) 2020.03.17 UITableView Paging 처리 (0) 2020.03.03 NavigationBar 아래 라인 생성 및 삭제 (0) 2020.03.01 TableView에서 TextView 자동 높이 조정 (0) 2020.03.01