Skip to content

Commit

Permalink
Allow an image to indicate its own density and correct its intrinsic …
Browse files Browse the repository at this point in the history
…size.

See https://discourse.wicg.io/t/proposal-exif-image-resolution-auto-and-from-image/4326/24

This proposal allows using EXIF or other metadata to determine an image's
default resolution, which may be different from the requested resolution
in srcset/image-set, or from the default of 1dppx.

The use-case is, for example, allowing serving low-density placeholder in poor
network conditions without affecting layout.

When an image indicates its intrinsic density-corrected size, that indication
is "stronger" than the requested density (current pixel density). This allows, for example, serving a regular 1x image when a 2x image is requested by srcset, allowing for correct presentation of content that contains that information.

The change to the HTML spec doesn't define exactly how an image format
would represent this metadata, which is aligned with how image orientation
from EXIF is defined in the CSS-images spec.

The WICG proposal defines that in detail - using size+resolution from EXIF
when their values are matching.
  • Loading branch information
noamr committed May 25, 2020
1 parent f57890b commit 238836b
Showing 1 changed file with 18 additions and 6 deletions.
24 changes: 18 additions & 6 deletions source
Original file line number Diff line number Diff line change
Expand Up @@ -27246,12 +27246,20 @@ was an English &lt;a href="/wiki/Music_hall">music hall&lt;/a> singer, ...</code

<p>Each <span>image request</span> has a <dfn>current pixel density</dfn>, which must initially be undefined.</p>

<p>When an <code>img</code> element has a <span>current pixel density</span> that is not 1.0, the
element's image data must be treated as if its resolution, in device pixels per <span
data-x="'px'">CSS pixels</span>, was the <span>current pixel density</span>. The image's
<dfn>density-corrected intrinsic width and height</dfn> are the <span data-x="intrinsic
dimensions">intrinsic width and height</span> after taking into account the <span>current pixel
density</span>.</p>
<p>Each <code>img</code> element has <dfn>intrinsicly defined density-corrected dimensions</dfn>,
which must initially be undefined.</p>

<p>To determine the a <dfn>density-corrected intrinsic width and height</dfn> of
<code>img</code> element <var>img</var>:
<ol>
<li><p>Set <var>dim</var> to <var>img</var>'s <span>intrinsicly defined density-corrected
dimensions</span>.

<li><p>If <var>dim</var> is not undefined, return <var>dim</var>.</p></li>
<li><p>Set <var>dim</var> to <var>img</var>'s <span>intrinsic dimensions</span>.</p></li>
<li><p>Divide <var>dim</var>'s width and height by <var>img</var>'s <span>current pixel density</span>
<li><p>Return <var>dim</var>.
</ol>

<p class="example">For example, if the <span>current pixel density</span> is 3.125, that means
that there are 300 device pixels per <span data-x="'in'">CSS inch</span>, and thus if the image
Expand Down Expand Up @@ -27797,6 +27805,9 @@ was an English &lt;a href="/wiki/Music_hall">music hall&lt;/a> singer, ...</code
fetched must run the following steps:</p>

<ol>
<li><p>The user agent should attempt to determine <var>image request</var>'s image's
<span>intrinsicly defined density-corrected dimensions</span> from the image's metadata.

<li><p>If the user agent is able to determine <var>image request</var>'s image's width and
height, and <var>image request</var> is <span>pending request</span>, set <var>image
request</var>'s <span data-x="img-req-state">state</span> to <span data-x="img-inc">partially
Expand Down Expand Up @@ -121445,6 +121456,7 @@ INSERT INTERFACES HERE
Nikki Bee,
Noah Mendelsohn,
Noah Slater,
Noam Rosenthal,
Noel Gordon,
Nolan Waite,
NoozNooz42,
Expand Down

0 comments on commit 238836b

Please sign in to comment.