ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 사진 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 키 값을 사용하여 사진의 날짜를 얻어올 수 있다.

     

    kCGImagePropertyExifDictionary

    CameraExif 프로젝트 더보기..

    반응형

    댓글

Designed by Tistory.