이미지 리소스

W3C 워킹 드래프트

이 버전:
https://www.w3.org/TR/2021/WD-image-resource-20210604/
최신 공개 버전:
https://www.w3.org/TR/image-resource/
최신 에디터스 드래프트:
https://w3c.github.io/image-resource/
이전 버전:
https://www.w3.org/TR/2021/WD-image-resource-20210426/
에디터:
Aaron Gustafson (Microsoft Corporation)
Rayan Kanso (Google Inc.)
Marcos Cáceres (W3C)
참여:
GitHub w3c/image-resource
이슈 등록
커밋 히스토리
풀 리퀘스트

초록

이 문서는 "이미지 리소스"의 개념과 이에 상응하는 WebIDL ImageResource 사전을 정의합니다. 웹 API는 ImageResource 사전을 이용해 HTMLImageElement가 적합하지 않거나 사용할 수 없는 상황(예: 워커)에서 이미지 리소스를 표현할 수 있습니다.

문서 현황

이 절은 본 문서가 발행될 당시의 문서 현황을 설명합니다. 다른 문서가 이 문서를 대체할 수 있습니다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 판은 W3C 기술 보고서 색인에서 https://www.w3.org/TR/ 에서 확인할 수 있습니다.

경고

이 명세는 안정적이지 않습니다. 논의에 참여하지 않는 구현자는 명세가 호환되지 않는 방식으로 변경되는 것을 겪게 될 수 있습니다.

이 문서는 웹 애플리케이션 작업 그룹에서 Working Draft로 발행되었습니다. 이 문서는 W3C 권고가 되는 것을 목표로 합니다.

본 명세 논의를 위해서는 GitHub Issues를 사용하는 것이 선호됩니다.

Working Draft로 발행되었다고 해서 W3C 회원의 승인을 의미하지는 않습니다.

이 문서는 초안이므로 언제든지 업데이트, 대체 또는 폐기될 수 있습니다. 진행 중인 작업 이외의 문서로 인용하는 것은 부적절합니다.

이 문서는 W3C 특허 정책 하에 운영되는 그룹에서 작성되었습니다. W3C공개된 특허 목록을 관리하며, 이 페이지에는 특허 공개 방법도 안내되어 있습니다. 특허가 필수 청구항을 포함한다고 믿는 사람이 실질적으로 이를 알게 된 경우, W3C 특허 정책 6항에 따라 정보를 공개해야 합니다.

이 문서는 2020년 9월 15일 W3C 프로세스 문서에 의해 관리됩니다.

1. 소개

웹 애플리케이션은 종종 개발자가 제공한 이미지 리소스를 HTML 문서 외부(예: 운영 체제, 브라우저 UI 등)에 표시하도록 받습니다. 이 명세는 이미지를 설명하고 이미지 리소스를 어디에서 가져올 수 있는지 나타내는 WebIDL 사전을 정의합니다. 사용자 에이전트는 이러한 추가 정보를 활용하여 최종 사용자의 기기에 가장 적합하게 표시하거나, 사용자의 환경 또는 선호와 가장 잘 일치하는 이미지를 선택할 수 있습니다.

2. 개인정보 및 보안 고려사항

이미지 리소스 가져오기는 사용자의 IP 주소를 노출할 수 있습니다. 사용자 에이전트가 개발자가 제공한 이미지 리소스를 가져와 필요 시 재사용을 위해 저장하는 것이 권장됩니다. 이렇게 하면 사용자의 위치를 장기간 추적하는 것을 제한할 수 있습니다.

3. 이미지 리소스

이미지 리소스는 다음으로 구성됩니다:

src
이미지 데이터를 가져올 URL입니다.
sizes
이미지를 나타내는 선택적 문자열로, linksizes 속성과 동일한 구문을 사용해 이미지의 크기를 표현합니다.
type
선택적 이미지 MIME 타입입니다.
label
이미지의 접근 가능한 이름을 나타내는 문자열입니다.

API에서, 이미지 리소스ImageResource 사전으로 표현됩니다.

[JSON]에서는 이미지 리소스가 객체로 표현됩니다.

4. ImageResource 사전

WebIDLdictionary ImageResource {
  required USVString src;
  DOMString sizes;
  DOMString type;
  DOMString label;
};

4.1 src 멤버

srcImageResourceURL로, 사용자 에이전트가 이미지 데이터를 가져올 수 있습니다.

4.2 sizes 멤버

sizes 멤버는 link 요소의 sizes 속성과 동일하며, 동일한 방식으로 처리됩니다.

여러 ImageResource 사전이 있는 경우, 사용자 에이전트는 sizes 값을 사용하여 어느 이미지가 디스플레이 컨텍스트에 가장 적합한지 결정할 수 있습니다(부적절한 것은 무시). 선택 사항입니다.

참고
sizes 멤버를 사용하면 여러 사이즈 값을 공백으로 구분해 쓸 수 있으므로(ICO처럼 다양한 크기의 이미지를 담은 포맷 지원),
const image = {
  src: "path/to/image.ico",
  sizes: "16x16 32x32 64x64",
  type: "image/vnd.microsoft.icon",
};
some.api.doSomething(image);

4.3 type 멤버

type 멤버는 이미지 리소스의 이미지 MIME 타입을 나타냅니다. 사용자 에이전트는 지원하지 않는 미디어 타입을 무시할 수 있습니다.

ImageResource에는 기본 MIME 타입이 없습니다. type은 조언적 속성입니다. 사용자 에이전트는 반드시 이미지 전용 MIME sniffing 규칙을 사용해 계산된 MIME 타입을 결정해야 합니다.

4.4 label 멤버

labelImageResource문자열이며, 해당 이미지에 대한 접근 가능한 이름을 제공합니다.

구현자는 사용자에게 노출하는 ImageResource마다 접근 가능한 이름을 유도해야 합니다.

작성자는 label을 추가하는 것이 강하게 권장됩니다. 단, ImageResource접근 가능한 이름이 컨텍스트 내의 외부 레이블로부터 유추 가능한 경우는 예외입니다. 예를 들어, manifest의 경우 name (또는 short_name)이 외부 레이블을 제공하여, label이 정의되지 않은 icons 배열의 모든 멤버에 적용될 수 있습니다.

명시적 label외부 레이블이 모두 제공되지 않은 경우, type내장 접근 가능한 이름 제공을 지원하면, 구현자는 선택적으로 labelsrc를 가져와 처리할 때까지 지연시킬 수 있습니다. src에서 내장 접근 가능한 이름이 발견된 경우, 구현자는 반드시 label 값을 해당 값으로 업데이트해야 합니다.

5. API에서 ImageResource 처리

API에서 ImageResource를 처리하는 절차는 아래 알고리즘에 따릅니다. 이 알고리즘에는 ImageResource input이 인자로 들어오며, 이미지 리소스를 반환합니다.

  1. base URL을 해당 사전이 사용되는 relevant settings objectapi base url로 설정합니다.
  2. image를 새로운 이미지 리소스로 생성합니다.
  3. imagesrcinput.srcbase URLURL 파싱을 한 결과를 할당합니다. URL 파싱에 실패하면 TypeError를 throw합니다.
  4. inputsizes 멤버가 있다면:
    1. imagesizesinput.sizes 값을 sizes 속성을 가진 link 요소처럼 파싱한 결과를 할당합니다. 파싱이 실패하면 TypeError를 throw합니다.
  5. inputtype 멤버가 있고 내용이 빈 문자열이 아니라면:
    1. type이미지 MIME 타입이 아니면 TypeError를 throw합니다.
    2. imagetypeinput.type 값을 할당합니다.
  6. imagelabel접근 가능한 이름 유도의 결과로 설정합니다.
  7. image를 반환합니다.

6. JSON에서 이미지 리소스 처리

JSON에서 이미지 리소스 처리는 JSON 객체 inputURL base가 주어졌을 때, 동작합니다. 반환값은 순서 있는 맵입니다.

  1. inputobject 타입이 아니면, 실패를 반환합니다.
  2. input["src"]가 문자열 타입이 아니면, 실패를 반환합니다.
  3. src파싱 결과인 input["src"]와 base를 기반 URL로 사용한 값을 할당합니다.
  4. src가 실패라면, 실패를 반환합니다.
  5. image에 새로운 순서 있는 맵을 할당합니다.
  6. image["src"]에 src를 할당합니다.
  7. input["sizes"]의 타입이 문자열이고 길이가 0보다 크면:
    1. sizesinput["sizes"]를 sizes 속성을 가진 link 요소처럼 파싱한 결과를 할당합니다. 이때 rel 속성에 icon 토큰이 포함되어야 합니다.
    2. sizes가 실패면, 실패를 반환합니다.
    3. image["sizes"]에 sizes를 할당합니다.
  8. input["type"]의 타입이 문자열이고 길이가 0보다 크면:
    1. mime파싱 결과인 input["type"]을 할당합니다.
    2. mime이 실패라면, 실패를 반환합니다.
    3. image["type"]에 essence of mime을 할당합니다.
  9. image["label"]에 접근 가능한 이름 유도 결과값을 할당합니다.
  10. image를 반환합니다.

7. 이미지 리소스 가져오기

이미지 리소스 가져오기의 절차는 아래 알고리즘과 같습니다. 이 알고리즘은 이미지 리소스 image와, 선택적 Request request를 받습니다. 반환값은 Response 입니다.

  1. requestundefined이면:
    1. request에 새로운 Request를 할당합니다.
    2. URLimagesrc로 설정합니다.
    3. Destination을 "image"로 설정합니다.
    4. Client를 컨텍스트 객체의 relevant settings object로 설정합니다.
  2. requestClient가 null이면, TypeError를 throw합니다.
  3. request를 이용하여 fetch를 수행하고 Response를 반환합니다.
참고

8. 접근 가능한 이름 유도

접근 가능한 이름 유도 절차는 이미지 리소스 resource에 대해 다음과 같습니다. 반환값은 문자열입니다.

  1. resource["label"]이 문자열이면, input["label"]을 반환합니다.
  2. 그렇지 않고 image내장 접근 가능한 이름이 있으면, 그 내장 접근 가능한 이름을 반환합니다.
  3. 그렇지 않고 외부 레이블로 대체 가능하다면, 해당 외부 레이블을 반환합니다.
  4. ""(빈 문자열)을 반환합니다.

9. 내장 접근 가능한 이름을 지원하는 그래픽 포맷 예시

특정 그래픽 포맷은 이미지의 내용 일부로 내장 접근 가능한 이름을 포함할 수 있습니다. 예시는 다음과 같습니다:

10. 적합성

비규범 부분으로 표시된 섹션뿐 아니라, 이 명세서의 모든 작성 지침, 다이어그램, 예시 및 참고 사항은 비규범입니다. 이 명세서의 나머지 모든 부분은 규범적입니다.

이 문서 내 MAY, MUST, RECOMMENDED 키워드는 BCP 14 [RFC2119] [RFC8174] 에서와 같이 모두 대문자로 표시될 때에만 해당 의미로 해석되어야 합니다.

A. 참고문헌

A.1 규범적 참고문헌

[appmanifest]
Web Application Manifest. Marcos Caceres; Kenneth Christiansen; Mounir Lamouri; Anssi Kostiainen; Matt Giuca; Aaron Gustafson. W3C. 1 June 2021. W3C Working Draft. URL: https://www.w3.org/TR/appmanifest/
[fetch]
Fetch Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://fetch.spec.whatwg.org/
[html]
HTML Standard. Anne van Kesteren; Domenic Denicola; Ian Hickson; Philip Jägenstedt; Simon Pieters. WHATWG. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[infra]
Infra Standard. Anne van Kesteren; Domenic Denicola. WHATWG. Living Standard. URL: https://infra.spec.whatwg.org/
[JSON]
The JavaScript Object Notation (JSON) Data Interchange Format. T. Bray, Ed.. IETF. December 2017. Internet Standard. URL: https://datatracker.ietf.org/doc/html/rfc8259
[mimesniff]
MIME Sniffing Standard. Gordon P. Hemsley. WHATWG. Living Standard. URL: https://mimesniff.spec.whatwg.org/
[RFC2119]
Key words for use in RFCs to Indicate Requirement Levels. S. Bradner. IETF. March 1997. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[RFC8174]
Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words. B. Leiba. IETF. May 2017. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
[svg]
Scalable Vector Graphics (SVG) 1.0 Specification. Jon Ferraiolo. W3C. 4 September 2001. W3C Recommendation. URL: https://www.w3.org/TR/SVG/
[url]
URL Standard. Anne van Kesteren. WHATWG. Living Standard. URL: https://url.spec.whatwg.org/
[webidl]
Web IDL. Boris Zbarsky. W3C. 15 December 2016. W3C Editor's Draft. URL: https://heycam.github.io/webidl/