이미지 메타데이터를 읽는 방법(HTML)
[ 이 문서는 Windows 런타임 앱을 작성하는 Windows 8.x 및 Windows Phone 8.x 개발자를 대상으로 합니다. Windows 10용으로 개발하는 경우에는 최신 설명서를 참조하세요.]
이미지 파일에서 메타데이터를 검색하는 방법을 보여 줍니다. 이미지 형식(JPEG, TIFF, PNG 등)은 키워드, GPS 위치, 카메라 정보 등을 설명하는 다양한 포함된 메타데이터를 지원합니다. 일반적으로 사용되는 이미징 속성에 액세스할 수 있으며 EXIF, XMP 등과 같은 형식으로 저장된 원시 메타데이터에 액세스하는 고급 기능도 수행할 수 있습니다.
시나리오에 따라 이미징 메타데이터에 액세스하는 Windows.Storage.FileProperties.ImageProperties 및 Windows.Graphics.Imaging.BitmapPropertiesView의 두 가지 클래스가 있습니다.
BitmapPropertiesView를 사용하여 Windows 속성(예: ImageProperties)을 가져올 수 있습니다. 하지만 이 클래스는 WIC 메타데이터 쿼리 언어를 사용하여 파일의 네이티브 메타데이터 구조에 대한 낮은 수준의 액세스를 제공합니다. 네이티브 메타데이터 액세스를 고급 시나리오이지만 Windows 속성 시스템에서 제공하는 것보다 더 많은 메타데이터에 액세스할 수 있습니다.
알아야 할 사항
기술
- JavaScript를 사용하는 첫 번째 Windows 런타임 앱 빌드
- Windows.Storage.FileProperties.ImageProperties
- Windows.Graphics.Imaging
- WIC(Windows Imaging Component) 메타데이터 쿼리 언어
사전 요구 사항
- JavaScript로 작성한 기본 Windows 런타임 앱을 만들 수 있다고 가정합니다. 자세한 내용은 JavaScript를 사용하여 첫 번째 Windows 런타임 앱 빌드를 참조하세요.
- StorageFile 또는 BitmapDecoder 개체를 만들었습니다. 이미지를 디코드하는 방법에서 두 개체를 가져오는 프로세스를 모두 안내합니다.
지침
단계 1: 디코더 개체 가져오기
BitmapDecoder 개체를 받는 함수의 시작 부분을 작성하고 검색된 속성을 저장할 변수를 선언합니다.
(function (decoder) {
var orientation;
var xmpCreator;
디코더를 사용하여 이미지 메타데이터에 액세스합니다. 디코더 개체가 없는 경우 이미지를 디코드하는 방법을 참조하세요. 여기서 범위 내에 유지할 변수를 선언합니다.
단계 2: Windows 속성 검색
BitmapDecoder 클래스는 BitmapPropertiesView 형식의 BitmapProperties 멤버가 있습니다. ImageProperties와 비슷하게 속성 키 이름 목록을 bitmapProperties.getPropertiesAsync에 전달하여 지원되는 Windows 속성을 비동기적으로 요청할 수 있습니다.
참고 일부 속성이 일부 형식에 대해 지원되지 않을 수 있습니다. 사진 메타데이터 정책은 각 속성을 지원하는 이미지 형식을 나열합니다.
return
decoder.bitmapProperties.getPropertiesAsync(["System.Photo.Orientation"])
.then(function(retrievedProps) {
BitmapPropertiesView 몇 가지 중요한 방식에서 ImageProperties와 다르게 동작합니다.
- 컬렉션에서 속성을 검색하기 전에 속성이 있는지를 확인해야 합니다. 이 메서드는 속성이 없을 경우 오류를 반환합니다.
- 각 속성 값은 BitmapTypedValue 형식입니다. 이 개체는 실제 데이터를 포함하는 Value 멤버와 데이터를 나타내는 Type 멤버가 있습니다.
- BitmapPropertiesView는 이미지 형식이 요청된 속성을 지원하지 않을 경우 오류를 반환합니다. 오류를 처리하거나 코드에서 이미지 형식이 지원하는 속성만 요청하는지 확인해야 합니다. 예를 들어 BMP 파일에는 메타데이터가 없습니다.
속성을 조회하는 방법은 다음과 같습니다.
if (retrievedProperties.hasKey("System.Photo.Orientation") {
orientation = retrievedProperties.lookup("System.Photo.Orientation").value;
}
}, function (error) {
switch (error.number) {
case -2003292287:
// The image format does not support this property.
break;
case -2003292287:
// The image format does not support metadata.
break;
default:
// Catch any other errors.
break;
}
});
단계 3: 네이티브 이미지 메타데이터 검색
ImageProperties는 Windows 속성으로 제한되지만 BitmapPropertiesView는 이미지에 저장된 대부분의 메타데이터에 액세스할 수 있습니다. 각 비트맵 코덱에서 지원되는 메타데이터 형식 목록은 네이티브 이미지 형식 메타데이터 쿼리를 참조하세요.
WIC 메타데이터 쿼리 언어를 사용하여 System.Photo 속성을 사용하는 방법과 비슷하게 속성을 조회합니다. 속성 이름을 메타데이터 쿼리 문자열로 바꿉니다.
2단계에서 작성한 코드를 다음 코드로 바꿉니다.
return decoder.bitmapProperties.getPropertiesAsync(["/xmp/dc:creator"])
.then(function(retrievedProps) {
if (retrievedProperties.hasKey("/xmp/dc:creator") {
xmpCreator = retrievedProperties.lookup("/xmp/dc:creator").value;
}
}, function (error) {
switch (error.number) {
case -2003292287:
// The image format does not support this property.
break;
case -2003292287:
// The image format does not support metadata.
break;
default:
// Catch any other errors.
break;
}
});
이 코드 조각은 Dublin Core XMP 스키마에 정의된 작성자 메타데이터를 요청합니다. "/xmp/dc:creator" 쿼리는 JPEG 이미지에만 사용할 수 있습니다. 예를 들어 TIFF 이미지도 XMP 메타데이터를 지원하지만 해당 TIFF 쿼리는 "/ifd/xmp/dc:creator"입니다.