C# :: Lecture & TIPs

[C#] 이미지 파일의 메타데이터 (EXIF) 태그 읽기 / 편집하기

C#에서 .jpg / .png / .tif / .bmp 등의 이미지 파일의 EXIF (메타데이터) 를 편집하는 자료 찾는데 매우 어렵게 찾은 관계로 필요한 정보를 기록해둡니다.

우선 편집할 EXIF (메타데이터) 의 Tag 정보를 알아야 되는데 이것에 대한 정보는 아래의 링크를 통해 참고하시면 되겠습니다.

http://www.exiv2.org/tags.html

참고 코드는 아래의 첨부된 파일을 다운로드 하셔서 사용하실 수 있습니다.

https://1drv.ms/u/s!AmsqTf3EgmJAoZdvU1tuW0xXWl-LTA

위 두 가지를 알면 jpg 이미지 파일의 속성에서 자세히 Tab 에 있는 정보를 가져올 수도 있고 해당 정보에 값을 기록할 수도 있습니다.

현재 머신비전 카메라에서 촬영한 이미지에 메타데이터 (EXIF 정보) 를 추가해 저장하면 추후 해당 메타데이터 정보에 따른 측정 값을 적용한 이미지 값들을 불러 올 수 있을 것으로 보이는데요.

0x010f271ImageExif.Image.MakeASCIIThe manufacturer of the recording equipment. This is the manufacturer of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.
0x0110272ImageExif.Image.ModelASCIIThe model name or model number of the equipment. This is the model name or number of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.
0x10014097LongExif.Iop.RelatedImageWidthLongImage width
0x10024098LongExif.Iop.RelatedImageLengthLongImage Height
0x829a33434PhotoExif.Photo.ExposureTimeRationalExposure time, given in seconds (sec).
0x829d33437PhotoExif.Photo.FNumberRationalThe F number.
0x474618246ImageExif.Image.RatingShortRating tag used by Windows
0x474918249ImageExif.Image.RatingPercentShortRating tag used by Windows, value in percent
     
0x9c9c40092ImageExif.Image.XPCommentByteComment tag used by Windows, encoded in UCS2
x9c9e40094ImageExif.Image.XPKeywordsByteKeywords tag used by Windows, encoded in UCS2

현재 진행하고 있는 프로젝트 상 메타데이터 (EXIF) 정보 중 수정이 필요한 이미지 정보들은 다음과 같습니다.

카메라의 모델명, 가로 세로 해상도 값, 노출 값 등…

위의 코드를 그대로 사용하면 메타데이터 (EXIF) 정보 중 Tag 값 혹은 Rating 값이 깨지는 현상이 발생합니다.

이를 수정하기 위해서는 태그나 설명 값에 대한 Encoding code를 Unicode 형식으로 저장해야 정상적으로 동작하며, 등급은 short 형식으로 받도록 별도로 수정해주는 작업이 필요합니다. 이와 더불어 메타데이터 중 기록이 되어 있지 않은 항목이 존재한다면, 데이터 값 추가 또는 수정 시도 시, 예외 오류가 발생하는 이슈가 있습니다.

관련 정보를 찾고, 실제 결과물을 구현하는 과정에서도 많이 헤맸습니다. 당연하게도, 해당 값을 읽는 방식과 마찬가지로 쓰는 방식 역시 Unicode 형식으로 데이터를 기록하여야 합니다.

위 코드를 쓰는데 확인할 내용은 이미지의 품질을 별도로 기록하는 내용은 없는데 추후에 활용하려면 이 부분 역시도 확인이 필요할 것 같습니다.

고맙습니다.

Leave a comment