디카로 찍은 JPG는 기본적으로 Exif라는 촬영정보에 대한 MetaData를 가지고 있다.
이정보는 유틸리티를 통해 볼수 있는데... 당연히 프로그램으로도 컨르롤 가능하다.

OPANDA IEXIF 라는 유틸 다른 유틸에는 잘 나오지 않는 GPS Eixf 정보가지 볼 수 있다.



.NET에서는 이미지를 System.Drawing.Image 로 컨트롤 하고..
.NET도움말을 보면 Image클래스로 이미지를 로드하면, Image.PropertyItems 로 Eixf정보를 조회할 수 있다고 되어있다.
PropertyItems 는 PropertyIitem의 배열이고 PropertyIitem이 우리가 원하는 Exif의 개별 정보이다.

//Exif 전체 정보 조회
FileStream stream = new FileStream(@"D:\test.jpg", FileMode.Open, FileAccess.Read);

System.Drawing.Image image = System.Drawing.Image.FromStream(stream,true,false);

PropertyItem[] ExifCollection = image.PropertyItems;

foreach(PropertyItem ExifItem in ExifCollection)
{
......
}


하지만, PropertyIitemId, Value, Len, Type이라는 4가지 속성을 가지고 있고,
값의 형태를 나타내는 Type에 의해서 호출하는 방식이 완전히 다르다 .
(나중에 다루지만, Type이 같아도 어떤 Exif정보를 가져오냐에 따라서도 완전히 다르다.)

Id 는 메타데이터 구분 식별자,
Value는 바이트 배열형태의 실데이터,
Len은 Value 의 길이,
Type은 MSDN에 다음과 같이 정의되어있다.
Type=1 : Value가 바이트 배열임을 지정합니다.
Type=2 :Value가 null로 끝나는 ASCII 문자열임을 지정합니다. 형식 데이터 멤버를 ASCII 형식으로 설정하는 경우 null 종결자를 포함하는 문자열의 길이로 Len 속성을 설정해야 합니다. 예를 들어, 문자열 "Hello"의 길이는 6입니다.
Type=3 :Value가 부호 없는 16비트 정수(Short)의 배열임을 지정합니다.
Type=4 :Value가 부호 없는 32비트 정수(Long)의 배열임을 지정합니다.
Type=5 :Value 데이터 멤버가 부호 없는 정수(Long) 쌍의 배열임을 지정합니다. 각 쌍은 분수를 나타냅니다. 첫째 정수는 분자이고 둘째 정수는 분모입니다.
Type=6 :Value가 데이터 형식의 값을 보유할 수 있는 바이트 배열임을 지정합니다.
Type=7 :Value가 부호 있는 32비트 정수(Long)의 배열임을 지정합니다.
Type=10 :Value가 부호 있는 정수(Long) 쌍의 배열임을 지정합니다. 각 쌍은 분수를 나타냅니다. 첫째 정수는 분자이고 둘째 정수는 분모입니다.
쉽게 정의하면, Type=1은 쓰이지 않고 Type=2가 문자이면 나머지는 모두 숫자형 데이터다.
이 Type과 PropertyIitem을 구분하는 Id에 따라서 값을 어떻게 불러와야 하는지가 결정된다.
Type이 2인 문자는 다음과 같이 불러올 수 있다.

System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
encoding.GetString(ExifItem.Value)




2006/09/28 13:24 2006/09/28 13:24
Trackback address :: http://zziuni.pe.kr/zziuni/trackback/246