핸드폰으로 찍은 사진을 확인해보면 이미지 상세 정보를 확인할 수 있다. 거기에는 사진을 언제, 어디서, 어떻게 찍었는지에 대한 내용이 담겨있다. 심지어 찍을 당시의 카메라 설정값(초점 거리, 셔터 속도 등)까지도 알 수 있다. 이러한 부수적인 정보를 보통 metadata라 표현하는데, 이미지의 metadata는 어떻게 저장되는 것일까?
(갤러리에서 사진의 상세 정보를 확인하면 날짜, 위치, 카메라 정보 등을 확인할 수 있다.)
여태 JPEG, PNG, GIF, 그리고 WebP 이미지 포맷에 대해 살펴봤다. 하지만 이 포맷들은 단순히 이미지 압축을 어떻게 할 것인지 다룬 방법들이라, 압축에 사용되는 필수 정보(이미지 크기, 압축 파라미터 등)만 기본 요소로 저장한다. 그래서 각 이미지 압축 포맷에서는 부수적인 metadata 저장을 위한 필드를 따로 지정해둔다. 대표적으로 Exif metadata를 저장하기 위한 JPEG의 APP1
segment, PNG의 eXIf
chunk, WebP의 EXIF
chunk 등이 바로 그 예다.
그렇다면 이미지 metadata를 위한 포맷은 어떤 것이 있을까? 이미지 metadata의 표준으로 사용되는 포맷들은 아래와 같다!
이번 포스트에서는 각 metadata 포맷에 대해 정리하고, 또 중복되는 속성들에 대해 어떻게 다루는지 살펴볼 예정이다.
Exif(Exchangeable image file format)는 스마트폰 등의 디지털 카메라에서 표준처럼 사용되는 metadata 포맷이다. 다르게 말하자면, 디지털 카메라로 찍은 파일은 대부분 JPEG/Exif 포맷으로 저장된다고 할 수 있다. (압축은 JPEG으로, metadata는 Exif로)
기본적으로 Exif는 TIFF(Tagged Image File Format)의 tag 구조를 빌려 표현되는데, 이는 독립적으로 사용되지 않고 JPEG, TIFF, RIFF, WAV 등의 기존 포맷과 함께 사용된다. (PNG에서는 원래 지원하지 않았었지만, 2017년 PNG 1.2 (ver 1.5) 이후 추가되었다고 한다.)
Exif에서 다루는 meatadata tag들은 다양하다.
이 정도면 우리가 찍은 사진에서 확인할 수 있는 상세 정보의 대부분을 Exif가 저장한다고 해도 과언이 아니겠다.
자세한 tag 정보를 확인하려면 관련 문서를 참고하기 바란다.
XMP(Extensible Metadata Platform)는 Adobe에서 제정한 ISO 규격의 metadata 포맷이다. 이 포맷은 이미지 뿐만 아니라 동영상(MP4, AVI 등), 오디오(WAV, MP3 등) , 그리고 문서(PDF, HTML 등) 파일에서도 사용될 정도로 범용적이며, 확장에 있어 자유로운 형태를 띤다.
기본적으로 XMP에서는 data model과 이를 표현하는 serialization 방식으로 나눠볼 수 있다.
Data model은 metadata 속성의 집합을 뜻하는, 일종의 추상적 개념이다. 이는 name/value pair가 될 수도, structured value가 될 수도, 혹은 list of values가 될 수도 있다. (또한 nested structure도 될 수 있다!)
또한 표준에 정의된 core properties가 있는데, 이 집합을 위한 특정 namespace들을 정의하고 있다 (e.g., Dublin Core namespace). 물론 사용자 정의 data model을 확장할 수 있도록 custom namespace 또한 지원된다.
XMP data model의 instance를 XMP packet으로 칭하며, 이는 즉, XMP metadata property들의 집합이라고 말할 수 있겠다. 하나의 packet은 하나의 resource에 대한 metadata여야 하고, 한 resource에 여러 packet이 존재할 수 있다.
Packet에 속성을 추가할 때는 기존 속성들에 영향을 끼치지 않도록 추가할 수 있다. 또한 XMP packet의 속성들을 추가/수정하는 경우 알 수 없는 속성들은 건드리지 않고 그대로 두도록 권고된다. 따라서 이는 데이터의 history를 기록하는 데에 유용하다.
('사진 촬영 -> 사진 편집 -> 최종 문서로 종합' 과 같이 데이터의 처리 단계를 기록할 수 있다.)
앞서 이야기한 data model은 추상적 개념이다. 따라서 data model을 파일에 저장할 때 구체적으로 표현하기 위해 serialization이 필요하다.
XMP의 serialization format으로는 W3C RDF/XML 문법이 주로 사용되며, RDF/XML로 만들어진 XMP packet을 serialize 하는 방법은 여러 가지가 존재한다고 한다. (뭔지 잘 모르겠다)
XMP data에 기록되는 가장 일반적인 metadata tag는 Dublin Core Metadata Initiative이며, 여기에는 title, description, creator 등이 포함된다. 이외에도 Exif와 중복되는 tag도 많이 지원하며, rating이나 person in image, face region 등 재밌는 tag도 저장할 수 있다. (이렇게 다양한 tag가 지원되는 이유는 아무래도 확장 가능하도록 설계되었기 때문일 것이다.)
물론 XMP에서도 제한적인 부분이 있다. XMP는 일반적으로 binary data type이 내장되는 것을 허용하지 않는다. 이는 즉, 어떤 binary data(e.g., thumnail images)라도 XML-friendly format (e.g., Base64)으로 encoding되어야 함을 의미한다.
XMP metadata는 문서 전체를 설명할 수도 있지만, page나 포함된 image와 같이 문서의 일부만 설명할 수도 있다. 이러한 구조를 통해 문서에 포함된 이미지 등에 대한 저작권 및 권리 정보도 유지할 수 있다. 마찬가지로, 여러 개의 작은 문서에서 만들어진 문서도 그 metadata를 유지할 수 있다.
자세한 tag 정보를 확인하려면 관련 문서를 참고하기 바란다.
TBU...
TBU...
아직 할 게 많이 남았다! 얼른 나머지도 정리하자!
감사합니다~