画像リソース

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 辞書型を定義します。Web APIは ImageResource 辞書を使うことで、 HTMLImageElement が適さない、あるいは利用できない(例:Worker内)状況で画像リソースを表現できます。

この文書のステータス

このセクションは、公開時点での本書のステータスを説明します。 他の文書が本書に取って代わる場合があります。現在の W3C 公開文書およびこの技術報告書の最新版は W3C 技術報告一覧 https://www.w3.org/TR/ で確認できます。

警告

この仕様は安定していません。 議論に参加していない実装者は、互換性のない方法で仕様が変わる可能性があります。

この文書は Web Applications Working Group により作業草案として公開されました。 この文書は W3C 勧告を目指しています。

この仕様の議論は GitHub Issues で行うことを推奨します。

作業草案として公開されている文書は W3C 会員による承認を意味するものではありません。

この文書は草案であり、随時更新・差し替え・廃止される場合があります。進行中の作業以外としてこの文書を引用するべきではありません。

この文書は W3C 特許ポリシーの下で運営されているグループによって作成されています。 W3C は、 パブリックな特許開示リスト を管理しています。そのページでは特許の開示方法も案内されています。実際に特許の存在を知り、それが 必須クレーム に該当すると考える場合は、 特許ポリシー第6節 に従い開示が必要です。

この文書は 2020年9月15日版 W3C プロセス文書 に準拠します。

1. はじめに

ウェブアプリケーションは、HTMLドキュメント外(OSやブラウザーUIなど)で表示される画像リソースを開発者から受け取ることがよくあります。この仕様は、画像を記述し、その画像リソースの取得先を示すWebIDL辞書型を定義します。ユーザーエージェントは、この追加情報を利用することで、エンドユーザーの端末に最適、またはユーザーの嗜好や環境にもっとも近い画像を選択できます。

2. プライバシーとセキュリティの考慮事項

画像リソースの取得時、ユーザーのIPアドレスが判明することがあります。 ユーザーエージェントは、開発者から提供された画像リソースを取得し、必要に応じて再利用できるよう保存することが推奨されます。 これにより、ユーザーの位置情報の長期的な追跡が制限されます。

3. 画像リソース

画像リソースは次の要素から構成されます:

src
画像データの取得元となるURL
sizes
画像のサイズを表すオプションの文字列であり、 link要素の sizes 属性と同じ構文を使用します。
type
オプションの画像MIMEタイプ
label
画像のアクセシブル・ネームを表す文字列

APIでは、画像リソースImageResource辞書として表されます。

[JSON]では、画像リソースはオブジェクトとして表現されます。

4. ImageResource 辞書型

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

4.1 src メンバー

srcImageResourceの画像データをユーザーエージェントがフェッチできるURLです。

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タイプ を決定しなければなりません。

4.4 label メンバー

labelは、ImageResourceに対応する画像の文字列 であり、画像のアクセシブル・ネームを提供します。

実装者は、ユーザーに公開するすべてのImageResourceに対し、アクセシブル・ネームの導出必須で行わなければなりません。

著者は、labelを明示的に追加することが強く推奨されます。 ただし、ImageResourceアクセシブル・ネームが コンテキストから外部ラベルとして推論できる場合を除きます。例えば、 マニフェスト文脈では、name(または short_name)が 外部ラベルとして指定され、 labelを持たない icons 配列のすべての要素のラベルとなります。

明示的なlabel外部ラベルも提供されていないが、type埋込型アクセシブル・ネームをサポートする場合、実装者はsrc取得・処理まで labelの割り当てを遅延できる可能性があるsrcから埋込型アクセシブル・ネームが取得できた場合、 実装者はlabelをその値に更新必須です。

5. APIからのImageResource処理

APIからのImageResourceの処理は、次のアルゴリズムで示されます。このアルゴリズムは ImageResource inputを受け取り、画像リソースを返します。

  1. base URLを、この辞書が使われている関連する設定オブジェクトAPIベースURLとする。
  2. image を新しい 画像リソース とする。
  3. imagesrc を、URLパースinput.srcbase URLを使った結果に設定する。 パース失敗時はTypeErrorを投げる。
  4. inputsizesメンバーが存在する場合:
    1. imagesizesを、input.sizes を、sizes 属性のようにパースした結果とする。このパースに失敗した場合は TypeErrorを投げる。
  5. inputtypeメンバーが存在し、空文字列でない場合:
    1. type画像MIMEタイプでなければ、 TypeErrorを投げる。
    2. imagetypeinput.type に設定する。
  6. imagelabelアクセシブル・ネームの導出の結果を設定する。
  7. imageを返す。

6. JSONからの画像リソースの処理

JSONから画像リソースを処理するには、JSONオブジェクトinputおよびURLbaseを与える。返り値は順序付きマップ

  1. inputobject型でない場合、失敗を返す。
  2. input["src"]が文字列型でない場合、失敗を返す。
  3. srcを、input["src"]をbaseを基準URLとしてパースした結果とする。
  4. srcが失敗の場合、失敗を返す。
  5. imageを新しい順序付きマップとする。
  6. image["src"]にsrcを設定する。
  7. input["sizes"]の型が文字列型かつ長さが0より大きい場合:
    1. sizesに、input["sizes"]を sizes 属性を持つ link 要素の属性としてパースした結果を設定する。rel 属性がiconを含むとする。
    2. sizesが失敗の場合、失敗を返す。
    3. image["sizes"]にsizesを設定する。
  8. input["type"]が文字列型で、長さが0より大きい場合:
    1. mimeを、input["type"]を MIMEタイプとしてパース した結果とする。
    2. mimeが失敗の場合、失敗を返す。
    3. image["type"]にmime本質部分を設定する。
  9. image["label"]にアクセシブル・ネームの導出の結果を設定する。
  10. imageを返す。

7. 画像リソースの取得

画像リソースの取得の手順は次のアルゴリズムで示される。アルゴリズムは画像リソースimageと、オプションでRequestrequestを受け取り、返り値はResponse

  1. requestundefinedの場合:
    1. requestを新規のRequestとする。
    2. URLimagesrcに設定する。
    3. Destinationを"image"に設定する。
    4. Clientをコンテキストオブジェクトの関連設定オブジェクトに設定する。
  2. requestClientがnullの場合、TypeErrorを投げる。
  3. requestfetchを行い、Responseを返す。

8. アクセシブル・ネームの導出

アクセシブル・ネームの導出画像リソースresourceに対し次の手順で行う。返り値は文字列

  1. resource["label"]が文字列の場合、input["label"]を返す。
  2. それ以外で、image埋込型アクセシブル・ネームを提供する場合、その埋込型アクセシブル・ネームを返す。
  3. それ以外で、外部ラベルが代替可能であれば、該当外部ラベルを返す。
  4. ""(空文字列)を返す。

9. 埋込型アクセシブル・ネーム対応グラフィクスフォーマット例

画像内容の一部として埋込型アクセシブル・ネームを含められるグラフィックス形式もある。たとえば次のようなものがある:

10. 適合性

この仕様の中で非規範的と明示されたセクション、著者ガイドライン、図、例および注記はすべて非規範的です。それ以外は規範的です。

本文書中の MAYMUSTRECOMMENDED というキーワードは、BCP 14 [RFC2119] [RFC8174] で説明されたとおり、大文字で現れた場合に限り、規範的な意味を持ちます。

A. 参考文献

A.1 規範参考文献

[appmanifest]
Web Application Manifest. Marcos Caceres; Kenneth Christiansen; Mounir Lamouri; Anssi Kostiainen; Matt Giuca; Aaron Gustafson. W3C. 2021年6月1日. W3C作業草案. 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. 2017年12月. 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. 1997年3月. 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. 2017年5月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc8174
[svg]
Scalable Vector Graphics (SVG) 1.0 Specification. Jon Ferraiolo. W3C. 2001年9月4日. W3C推奨. 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. 2016年12月15日. W3C Editor's Draft. URL: https://heycam.github.io/webidl/