Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-16 Thread Julian Reschke

On 2012-05-10 09:58, Edward O'Connor wrote:

Hi,

When authors adapt their sites for high-resolution displays such as the
iPhone's Retina display, they often need to be able to use different
assets representing the same image. Doing this for content images in
HTML is currently much more of a pain than it is in CSS (and it can be a
pain in CSS). I think we can best address this problem for bitmap[1]
content image by the addition of a srcset= attribute to the existing
img  element.

The srcset= attribute takes as its argument a simplified variant of
the image-set() microsyntax[2]. It would look something like this:

img src=foo-lores.jpg
  srcset=foo-hires.jpg 2x, foo-superduperhires.jpg 6.5x
  alt=decent alt text for foo.
...


Inventing a new microsyntax is tricky.

- comma separated implies you'll need to escape a comma when it 
appears in a URI; this may be a problem when the URI scheme assigns a 
special meaning to the comma (so it doesn't affect HTTP but still...)


- separating URIs from parameters with whitespace implies that the URIs 
are valid (in that they do not contain whitespace themselves); I 
personally have no problem with that, but it should be kept in mind


Best regards, Julian


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-16 Thread Odin Hørthe Omdal
On Wed, 16 May 2012 11:22:07 +0200, Julian Reschke julian.resc...@gmx.de  
wrote:



Inventing a new microsyntax is tricky.
 - comma separated implies you'll need to escape a comma when it  
appears in a URI; this may be a problem when the URI scheme assigns a  
special meaning to the comma (so it doesn't affect HTTP but still...)


Indeed.

Edward did not write it all as a spec, though, so cases like that might be  
a bit detailed for a first proposal. Hixies extension of srcset does  
however have some spec text, and that does in fact handle your first case:


http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#processing-the-image-candidates

 - separating URIs from parameters with whitespace implies that the URIs  
are valid (in that they do not contain whitespace themselves); I  
personally have no problem with that, but it should be kept in mind


Me neither. I'm no big fan of non-valid URIs. :-)

--
Odin Hørthe Omdal (Velmont/odinho) · Core, Opera Software, http://opera.com


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-16 Thread Julian Reschke

On 2012-05-16 11:51, Odin Hørthe Omdal wrote:

On Wed, 16 May 2012 11:22:07 +0200, Julian Reschke
julian.resc...@gmx.de wrote:


Inventing a new microsyntax is tricky.
- comma separated implies you'll need to escape a comma when it
appears in a URI; this may be a problem when the URI scheme assigns a
special meaning to the comma (so it doesn't affect HTTP but still...)


Indeed.

Edward did not write it all as a spec, though, so cases like that might
be a bit detailed for a first proposal. Hixies extension of srcset does
however have some spec text, and that does in fact handle your first case:

http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#processing-the-image-candidates
...


It looks like that, but it's non-trivial to check (that's why I prefer 
declarative definitions).


Best regards, Julian


[whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Edward O'Connor
Hi,

When authors adapt their sites for high-resolution displays such as the
iPhone's Retina display, they often need to be able to use different
assets representing the same image. Doing this for content images in
HTML is currently much more of a pain than it is in CSS (and it can be a
pain in CSS). I think we can best address this problem for bitmap[1]
content image by the addition of a srcset= attribute to the existing
img element.

The srcset= attribute takes as its argument a simplified variant of
the image-set() microsyntax[2]. It would look something like this:

img src=foo-lores.jpg
 srcset=foo-hires.jpg 2x, foo-superduperhires.jpg 6.5x
 alt=decent alt text for foo.

img srcset takes one or more comma separated image specifiers. An
image specifier consists of a URL to an image asset and an associated
scale factor, expressed as a number followed by the literal character
'x'. (The value of img src is treated as if it had a 1x scale
specified, so you can avoid duplicate references to the base asset.)

User Agents may make their asset selection before fetching any of the
assets, thus avoiding multiple asset loads  the associated performance
problems in constrained bandwidth environments.

The intrinsic size of the img can be computed by dividing the
intrinsic size of the actual image asset chosen with that asset's
associated scale factor. Suppose that foo-lowres.jpg is 100x100 and
foo-highres.jpg is 200x200 in the above example. If the UA chooses
foo-lowres.jpg, it computes the intrisnic size as (100/1)x(100/1) =
100x100. If the UA chooses foo-highres.jpg, it computes the intrisnic
size as (200/2)x(200/2) = 100x100.

A nice thing about this proposal is its backwards compatibility story.
Browsers which don't yet support img srcset will simply use the asset
referenced by img src. A polyfill could easily be written to check for
img srcset  swap out a different asset into img src, much like
existing libraries which check for data-fullsrc= or the like.

Why provide a scale factor and not a media query? Well, media queries
are claims about UA state, whereas here we're asserting something about
the relationship between the image assets. Also, User Agents should be
free to use whichever asset they deem best suited to their current
situation, taking into account not just media-queriable things like
device resolution but also any scaling applied to the img with CSS,
its width= and height= attributes, or even things like the current
page zoom level.

Of course there are other things like bandwidth availability, data plan
usage, etc. that web developers might want to take into account when
choosing which image assets to load. This is definitely something worth
exploring. In the future we could extend the asset descriptors to cover
such cases. Something like this, maybe:

 img srcset=foo-lowres.jpg 1x low-bandwidth,
  foo-highres.jpg 2x high-bandwidth

I'm purposefully not making a proposal for how to describe bandwidth,
data plan usage, or such things here. Ultimately I don't think
addressing the multiple-resolution case needs to wait for a solution to
these other cases. We don't need to SOLVE ALL THE PROBLEMS! right now.

One downside to this proposal is that the srcset= attribute takes a
microsyntax, and as a rule we try to avoid novel microsyntaxes in
attribute values. I think this particular microsyntax is pretty
straightforward and shouldn't cause all that much confusion for authors.

I think this is preferable to adding a suite of attributes with complex
inter-relationships, such as in Anselm Hannemann's proposal from last
August[3]. In such a proposal, we would either need to have a pre-
approved list of image scales (like Anselm's xs, s, m, l, xl), which
over-constrains designers' ability to create, or we would be introducing
user data into attribute names which—with the one exception of the
data-*= attributes—is something I really don't think we should do.

Some have argued that we should just use conneg to serve the best
image. This isn't an acceptable solution for at least three reasons:

* The server doesn't have all of the relevant information needed to
  pick the best image, and sending that information with every image
  asset request is bandwidth-intensive and enables increased user
  fingerprinting.

* HTML is used in a lot of contexts, such as in EPUB, in which there's
  no server to negotiate with in the first place.[4]

* The UA should be able to swap out one asset for another
  transparently after the page has loaded. For instance, the UA might
  want to swap things out when the user zooms in.

I also think this approach is better than minting a new image element,
but I'll make that argument in another email.


Ted

1. What responsive image problem? Just use SVG! :)

2. I've proposed image-set() for CSS4 Images. Here's the relevant post
   to www-style:
 http://lists.w3.org/Archives/Public/www-style/2012Feb/1103.html
   An implementation of image-set() has recently 

Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Aryeh Gregor
On Thu, May 10, 2012 at 10:58 AM, Edward O'Connor eocon...@apple.com wrote:
 The srcset= attribute takes as its argument a simplified variant of
 the image-set() microsyntax[2]. It would look something like this:

 img src=foo-lores.jpg
     srcset=foo-hires.jpg 2x, foo-superduperhires.jpg 6.5x
     alt=decent alt text for foo.

 img srcset takes one or more comma separated image specifiers. An
 image specifier consists of a URL to an image asset and an associated
 scale factor, expressed as a number followed by the literal character
 'x'. (The value of img src is treated as if it had a 1x scale
 specified, so you can avoid duplicate references to the base asset.)

 User Agents may make their asset selection before fetching any of the
 assets, thus avoiding multiple asset loads  the associated performance
 problems in constrained bandwidth environments.

I'd like to throw in another use-case that might be addressable by the
same feature: allowing Save As... to save a different version of the
image (e.g., higher-res) than is actually displayed.  Wikipedia, for
instance, often has very high-res images that get scaled down for
article viewing to save bandwidth and avoid possibly-ugly rescaling.
(At least historically, some browsers used very bad rescaling
algorithms.)  It would be nice if when users saved the image, they
saved the full-res version.  Perhaps browsers could save the
highest-res image available, rather than the one that happens to be
used for display right now.

Another obvious use-case I'd like to point out is print.  It's not
quite as trendy as the iPhone Retina display -- in fact maybe it's
getting passé :) -- but print is generally higher-res than display,
and it's common for images to appear pixelated when printing.  This
use-case might have the same requirements as the iPhone Retina
display, but it should be kept in mind in case it doesn't.

A fourth use-case I'd like to suggest is vector images.  Last I
checked, many authors don't want to serve SVG directly because too
many browsers don't support it in img (or at all).  Perhaps it
should be possible to specify vector or something in place of a
scale factor, to indicate that the image should be suitable for all
resolutions.  (A possible problem with this: very detailed SVGs can be
much larger than the equivalent bitmaps, so the bandwidth tradeoff
might not always be good.  But authors can worry about that
themselves, I guess, and not specify such vector images as possible
sources.)

It's possible that the best solution won't accommodate all of these
use-cases, but I'm just throwing them out here so that they can be
taken into account.


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Edward O'Connor
Aryeh wrote:

 I'd like to throw in another use-case that might be addressable by the
 same feature: allowing Save As... to save a different version of the
 image (e.g., higher-res) than is actually displayed.
[…]
 Another obvious use-case I'd like to point out is print.

Yes, these are both excellent reasons for us to adopt such a feature,
and the img srcset proposal can handle both cases.

 A fourth use-case I'd like to suggest is vector images. Last I
 checked, many authors don't want to serve SVG directly because too
 many browsers don't support it in img (or at all).

I'm not sure about this one. If a browser doesn't support SVG, I want to
be able to provide a bitmap fallback regardless of how I included the
SVG—in both the img src or inline svg element cases. img srcset
isn't about providing fallback, so this might best be addressed with a
different feature.

 It's possible that the best solution won't accommodate all of these
 use-cases, but I'm just throwing them out here so that they can be
 taken into account.

*nod*


Thanks,
Ted



Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Aryeh Gregor
On Thu, May 10, 2012 at 2:44 PM, Edward O'Connor eocon...@apple.com wrote:
 I'm not sure about this one. If a browser doesn't support SVG, I want to
 be able to provide a bitmap fallback regardless of how I included the
 SVG—in both the img src or inline svg element cases. img srcset
 isn't about providing fallback, so this might best be addressed with a
 different feature.

There's already an easy script-free way to support fallback in inline
svg -- add an img inside some element that SVG ignores.  (I can't
remember which one is recommended, but IIRC there is one that's
suitable.)  A browser that doesn't support svg will ignore all the
SVG tags as unrecognized wrappers, and just display the img.  A
browser that supports svg will ignore the img.  There's no good
existing fallback for img that I know of.

In practice, any browser that supports srcset will support SVG-in-img,
and in principle vector images can be thought of as infinite-res, so
it seems like it might be a useful feature to tack on.  But this is
the weakest use-case given, I agree, and it might be best not to solve
it.


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Scott González
You should look into the previous discussions at
http://www.w3.org/community/respimg/

There's also a prototype using media queries at
https://github.com/scottjehl/picturefill. I realize you specifically said
you think media queries don't solve all of the problems, but it seems worth
looking at.


On Thu, May 10, 2012 at 3:58 AM, Edward O'Connor eocon...@apple.com wrote:

 Hi,

 When authors adapt their sites for high-resolution displays such as the
 iPhone's Retina display, they often need to be able to use different
 assets representing the same image. Doing this for content images in
 HTML is currently much more of a pain than it is in CSS (and it can be a
 pain in CSS). I think we can best address this problem for bitmap[1]
 content image by the addition of a srcset= attribute to the existing
 img element.

 The srcset= attribute takes as its argument a simplified variant of
 the image-set() microsyntax[2]. It would look something like this:

 img src=foo-lores.jpg
 srcset=foo-hires.jpg 2x, foo-superduperhires.jpg 6.5x
 alt=decent alt text for foo.

 img srcset takes one or more comma separated image specifiers. An
 image specifier consists of a URL to an image asset and an associated
 scale factor, expressed as a number followed by the literal character
 'x'. (The value of img src is treated as if it had a 1x scale
 specified, so you can avoid duplicate references to the base asset.)

 User Agents may make their asset selection before fetching any of the
 assets, thus avoiding multiple asset loads  the associated performance
 problems in constrained bandwidth environments.

 The intrinsic size of the img can be computed by dividing the
 intrinsic size of the actual image asset chosen with that asset's
 associated scale factor. Suppose that foo-lowres.jpg is 100x100 and
 foo-highres.jpg is 200x200 in the above example. If the UA chooses
 foo-lowres.jpg, it computes the intrisnic size as (100/1)x(100/1) =
 100x100. If the UA chooses foo-highres.jpg, it computes the intrisnic
 size as (200/2)x(200/2) = 100x100.

 A nice thing about this proposal is its backwards compatibility story.
 Browsers which don't yet support img srcset will simply use the asset
 referenced by img src. A polyfill could easily be written to check for
 img srcset  swap out a different asset into img src, much like
 existing libraries which check for data-fullsrc= or the like.

 Why provide a scale factor and not a media query? Well, media queries
 are claims about UA state, whereas here we're asserting something about
 the relationship between the image assets. Also, User Agents should be
 free to use whichever asset they deem best suited to their current
 situation, taking into account not just media-queriable things like
 device resolution but also any scaling applied to the img with CSS,
 its width= and height= attributes, or even things like the current
 page zoom level.

 Of course there are other things like bandwidth availability, data plan
 usage, etc. that web developers might want to take into account when
 choosing which image assets to load. This is definitely something worth
 exploring. In the future we could extend the asset descriptors to cover
 such cases. Something like this, maybe:

  img srcset=foo-lowres.jpg 1x low-bandwidth,
  foo-highres.jpg 2x high-bandwidth

 I'm purposefully not making a proposal for how to describe bandwidth,
 data plan usage, or such things here. Ultimately I don't think
 addressing the multiple-resolution case needs to wait for a solution to
 these other cases. We don't need to SOLVE ALL THE PROBLEMS! right now.

 One downside to this proposal is that the srcset= attribute takes a
 microsyntax, and as a rule we try to avoid novel microsyntaxes in
 attribute values. I think this particular microsyntax is pretty
 straightforward and shouldn't cause all that much confusion for authors.

 I think this is preferable to adding a suite of attributes with complex
 inter-relationships, such as in Anselm Hannemann's proposal from last
 August[3]. In such a proposal, we would either need to have a pre-
 approved list of image scales (like Anselm's xs, s, m, l, xl), which
 over-constrains designers' ability to create, or we would be introducing
 user data into attribute names which—with the one exception of the
 data-*= attributes—is something I really don't think we should do.

 Some have argued that we should just use conneg to serve the best
 image. This isn't an acceptable solution for at least three reasons:

 * The server doesn't have all of the relevant information needed to
  pick the best image, and sending that information with every image
  asset request is bandwidth-intensive and enables increased user
  fingerprinting.

 * HTML is used in a lot of contexts, such as in EPUB, in which there's
  no server to negotiate with in the first place.[4]

 * The UA should be able to swap out one asset for another
  transparently after the page has loaded. For instance, the UA 

Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Tab Atkins Jr.
This proposal has a similar issue to image-set() - if the 2x means
twice the resolution (which it should), this will *not work by
default*.  If you make a 5 inch wide image and save it as 200dpi, when
you send it to the browser its automatic size will be 10 inches wide.
Browsers are constrained by back-compat to always display images at
96dpi.  You can get around this by explicitly setting img width, but
we shouldn't require that if we can avoid it.

This isn't hard to fix, of course; the fix just isn't included right now.

CSS3 Images has the image-resolution property, which lets you tell the
browser what resolution to display the image at (that is, how it
should determine the automatic size).  You can say image-resolution:
from-image; to get it to use the image's native resolution, whatever
it is.  So, we need to add a rule to the UA stylesheet that says
img[srcset] { image-resolution: from-image; }.

In the closely-related case of using image-set() in CSS, we can just
have the winning image set the default resolution.  An earlier
version of the image() function let you set an image's resolution
immediately, but we punted it for simplicity at level 3.  This would
do the same thing.

That all said, I don't like the 2x notation.  It's declaring this
image's resolution is twice that of a normal image.  This has two
problems.  For one, we already have a unit that means that - the dppx
unit.  Using 2dppx is identical to the meaning of 2x.  Since
image-set() is newer than the dppx unit, we should change it to use
resolution instead.

For two, I'm not sure that it's particularly obvious that when you say
2x, you should make sure your image was saved as 196dpi.  You have
to already know what the default resolution is.  As well, I think that
values like 300dpi are pretty common, and they don't map to integral
'x' values.  If people say screw it and use 3x, this'll be
slightly wrong and I think will cause ugly blurring.  If we make this
take resolution, people can just use the dpi unit.

I agree overall that this is the right approach - declaring relevant
information to the browser and letting it decide what to do is better
than trying to set up constraints by yourself.  For example, using MQ
could result in the silly situation of downloading a high-res image at
first because you're on 4G, then throwing them away and downloading
low-res images when you drop to 2G.  Using image-set() or @srcset
would let the browser keep the images it had already downloaded.

~TJ

~TJ


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Simon Pieters
On Thu, 10 May 2012 15:24:28 +0200, Tab Atkins Jr. jackalm...@gmail.com  
wrote:



This proposal has a similar issue to image-set() - if the 2x means
twice the resolution (which it should), this will *not work by
default*.  If you make a 5 inch wide image and save it as 200dpi, when
you send it to the browser its automatic size will be 10 inches wide.
Browsers are constrained by back-compat to always display images at
96dpi.  You can get around this by explicitly setting img width, but
we shouldn't require that if we can avoid it.

This isn't hard to fix, of course; the fix just isn't included right now.


We should indeed fix it.


CSS3 Images has the image-resolution property, which lets you tell the
browser what resolution to display the image at (that is, how it
should determine the automatic size).  You can say image-resolution:
from-image; to get it to use the image's native resolution, whatever
it is.  So, we need to add a rule to the UA stylesheet that says
img[srcset] { image-resolution: from-image; }.


Do we want from-image here? Or do authors prefer to serve 96dpi images  
that are bigger, and specify the intended dpi in the markup?



In the closely-related case of using image-set() in CSS, we can just
have the winning image set the default resolution.  An earlier
version of the image() function let you set an image's resolution
immediately, but we punted it for simplicity at level 3.  This would
do the same thing.

That all said, I don't like the 2x notation.  It's declaring this
image's resolution is twice that of a normal image.  This has two
problems.  For one, we already have a unit that means that - the dppx
unit.  Using 2dppx is identical to the meaning of 2x.  Since
image-set() is newer than the dppx unit, we should change it to use
resolution instead.

For two, I'm not sure that it's particularly obvious that when you say
2x, you should make sure your image was saved as 196dpi.  You have
to already know what the default resolution is.  As well, I think that
values like 300dpi are pretty common, and they don't map to integral
'x' values.  If people say screw it and use 3x, this'll be
slightly wrong and I think will cause ugly blurring.  If we make this
take resolution, people can just use the dpi unit.


Can we just use CSS's 'dpi' instead?

img src=default.jpg srcset=highres.jpg 300dpi


I agree overall that this is the right approach - declaring relevant
information to the browser and letting it decide what to do is better
than trying to set up constraints by yourself.  For example, using MQ
could result in the silly situation of downloading a high-res image at
first because you're on 4G, then throwing them away and downloading
low-res images when you drop to 2G.  Using image-set() or @srcset
would let the browser keep the images it had already downloaded.


Indeed.

--
Simon Pieters
Opera Software


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Edward O'Connor
Hi,

 This proposal has a similar issue to image-set() - if the 2x means
 twice the resolution (which it should), this will *not work by
 default*.

Just a quick update for the list—Tab and I chatted about this F2F just
now and we agree that there isn't really a problem here, so long as the
spec text is sufficiently detailed.


Ted



Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Tab Atkins Jr.
On Thu, May 10, 2012 at 3:47 PM, Simon Pieters sim...@opera.com wrote:
 On Thu, 10 May 2012 15:24:28 +0200, Tab Atkins Jr. jackalm...@gmail.com
 wrote:
 CSS3 Images has the image-resolution property, which lets you tell the
 browser what resolution to display the image at (that is, how it
 should determine the automatic size).  You can say image-resolution:
 from-image; to get it to use the image's native resolution, whatever
 it is.  So, we need to add a rule to the UA stylesheet that says
 img[srcset] { image-resolution: from-image; }.

 Do we want from-image here? Or do authors prefer to serve 96dpi images that
 are bigger, and specify the intended dpi in the markup?

Can you clarify what you mean by this?  Do you mean serving a 10inch
wide image at 96dpi rather than a 5inch wide image at 192dpi, and then
telling the browser to scale it by the x factor?

The two are identical in the image's data (they're all 960 pixels
wide), only the metadata differs.

I suspect both:
1. A lot of authors would find it very confusing if they couldn't save
an image at 300dpi and have it just work, and
2. A lot of authors will be confused to discover that that they have
to save their image as 300dpi to get it to work.


 For two, I'm not sure that it's particularly obvious that when you say
 2x, you should make sure your image was saved as 196dpi.  You have
 to already know what the default resolution is.  As well, I think that
 values like 300dpi are pretty common, and they don't map to integral
 'x' values.  If people say screw it and use 3x, this'll be
 slightly wrong and I think will cause ugly blurring.  If we make this
 take resolution, people can just use the dpi unit.

 Can we just use CSS's 'dpi' instead?

 img src=default.jpg srcset=highres.jpg 300dpi

If you take dpi, you might as well take all of the resolution units.
 There's only 3 so far - dpi, dpcm, and dppx.  There's no good reason
to limit to only one of them, since they're all constant multiples of
each other.

~TJ


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Mathew Marquis


On May 10, 2012, at 9:47 AM, Simon Pieters wrote:

 On Thu, 10 May 2012 15:24:28 +0200, Tab Atkins Jr. jackalm...@gmail.com 
 wrote:
 
 This proposal has a similar issue to image-set() - if the 2x means
 twice the resolution (which it should), this will *not work by
 default*.  If you make a 5 inch wide image and save it as 200dpi, when
 you send it to the browser its automatic size will be 10 inches wide.
 Browsers are constrained by back-compat to always display images at
 96dpi.  You can get around this by explicitly setting img width, but
 we shouldn't require that if we can avoid it.
 
 This isn't hard to fix, of course; the fix just isn't included right now.
 
 We should indeed fix it.
 
 CSS3 Images has the image-resolution property, which lets you tell the
 browser what resolution to display the image at (that is, how it
 should determine the automatic size).  You can say image-resolution:
 from-image; to get it to use the image's native resolution, whatever
 it is.  So, we need to add a rule to the UA stylesheet that says
 img[srcset] { image-resolution: from-image; }.
 
 Do we want from-image here? Or do authors prefer to serve 96dpi images that 
 are bigger, and specify the intended dpi in the markup?
 
 In the closely-related case of using image-set() in CSS, we can just
 have the winning image set the default resolution.  An earlier
 version of the image() function let you set an image's resolution
 immediately, but we punted it for simplicity at level 3.  This would
 do the same thing.
 
 That all said, I don't like the 2x notation.  It's declaring this
 image's resolution is twice that of a normal image.  This has two
 problems.  For one, we already have a unit that means that - the dppx
 unit.  Using 2dppx is identical to the meaning of 2x.  Since
 image-set() is newer than the dppx unit, we should change it to use
 resolution instead.
 
 For two, I'm not sure that it's particularly obvious that when you say
 2x, you should make sure your image was saved as 196dpi.  You have
 to already know what the default resolution is.  As well, I think that
 values like 300dpi are pretty common, and they don't map to integral
 'x' values.  If people say screw it and use 3x, this'll be
 slightly wrong and I think will cause ugly blurring.  If we make this
 take resolution, people can just use the dpi unit.
 
 Can we just use CSS's 'dpi' instead?
 
 img src=default.jpg srcset=highres.jpg 300dpi

Hey guys. Don’t know if it’s too early to chime in with this, but we were told 
by some members of the Chrome team that any browser that supports DNS 
prefetching — including assets — wouldn’t consider “looking-ahead” on the img 
tag as an option. The original src would be fetched in any case, saddling users 
with a redundant download.

I’ve been living and breathing this topic in the Responsive Images Community 
Group for months now, so I’m psyched to see the problem getting some attention!

 
 I agree overall that this is the right approach - declaring relevant
 information to the browser and letting it decide what to do is better
 than trying to set up constraints by yourself.  For example, using MQ
 could result in the silly situation of downloading a high-res image at
 first because you're on 4G, then throwing them away and downloading
 low-res images when you drop to 2G.  Using image-set() or @srcset
 would let the browser keep the images it had already downloaded.
 
 Indeed.
 
 -- 
 Simon Pieters
 Opera Software



Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Boris Zbarsky

On 5/10/12 10:19 AM, Mathew Marquis wrote:

Hey guys. Don’t know if it’s too early to chime in with this, but we were told 
by some members of the Chrome team that any browser that supports DNS 
prefetching — including assets — wouldn’t consider “looking-ahead” on the img 
tag as an option.


Why not?  In any case, _DNS_ prefetching would be the same for both the 
low-res and high-res image, I would think.



The original src would be fetched in any case, saddling users with a redundant 
download.


That sounds like image prefetching, not DNS prefetching.  I see no 
obvious reason it couldn't look at multiple attributes.


-Boris


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Simon Pieters
On Thu, 10 May 2012 16:19:13 +0200, Tab Atkins Jr. jackalm...@gmail.com  
wrote:



On Thu, May 10, 2012 at 3:47 PM, Simon Pieters sim...@opera.com wrote:
On Thu, 10 May 2012 15:24:28 +0200, Tab Atkins Jr.  
jackalm...@gmail.com

wrote:

CSS3 Images has the image-resolution property, which lets you tell the
browser what resolution to display the image at (that is, how it
should determine the automatic size).  You can say image-resolution:
from-image; to get it to use the image's native resolution, whatever
it is.  So, we need to add a rule to the UA stylesheet that says
img[srcset] { image-resolution: from-image; }.


Do we want from-image here? Or do authors prefer to serve 96dpi images  
that

are bigger, and specify the intended dpi in the markup?


Can you clarify what you mean by this?  Do you mean serving a 10inch
wide image at 96dpi rather than a 5inch wide image at 192dpi, and then
telling the browser to scale it by the x factor?


Yeah.


The two are identical in the image's data (they're all 960 pixels
wide), only the metadata differs.


Right. I gathered that from-image would use the metadata.


I suspect both:
1. A lot of authors would find it very confusing if they couldn't save
an image at 300dpi and have it just work, and


This is the situation today for img src, and I guess we can't change it  
now. We can provide an opt-in, though, that could also work for img src  
(like CSS image-resolution).



2. A lot of authors will be confused to discover that that they have
to save their image as 300dpi to get it to work.


Yeah. Since the author needs to specify the resolution in the markup to  
inform the browser which image to download, we might as well use that  
information since it's more likely to be the intended dpi.



Can we just use CSS's 'dpi' instead?

img src=default.jpg srcset=highres.jpg 300dpi


If you take dpi, you might as well take all of the resolution units.
 There's only 3 so far - dpi, dpcm, and dppx.  There's no good reason
to limit to only one of them, since they're all constant multiples of
each other.


WFM.

--
Simon Pieters
Opera Software


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Mathew Marquis

On May 10, 2012, at 8:36 AM, Scott González wrote:

 You should look into the previous discussions at
 http://www.w3.org/community/respimg/
 
 There's also a prototype using media queries at
 https://github.com/scottjehl/picturefill. I realize you specifically said
 you think media queries don't solve all of the problems, but it seems worth
 looking at.
 

I can’t second Scott’s suggestion enough. There is a ton of history and 
valuable conversation around this topic already in the Community Group, and 
we’ve been working with a couple of browser reps trying to get this thing 
solved. We’ve even gone so far as to put the solution that seems to have the 
most legs together as a sort-of spec, so all the details are in one 
easily-parsed place: https://github.com/Wilto/respimg


 
 On Thu, May 10, 2012 at 3:58 AM, Edward O'Connor eocon...@apple.com wrote:
 
 Hi,
 
 When authors adapt their sites for high-resolution displays such as the
 iPhone's Retina display, they often need to be able to use different
 assets representing the same image. Doing this for content images in
 HTML is currently much more of a pain than it is in CSS (and it can be a
 pain in CSS). I think we can best address this problem for bitmap[1]
 content image by the addition of a srcset= attribute to the existing
 img element.
 
 The srcset= attribute takes as its argument a simplified variant of
 the image-set() microsyntax[2]. It would look something like this:
 
 img src=foo-lores.jpg
srcset=foo-hires.jpg 2x, foo-superduperhires.jpg 6.5x
alt=decent alt text for foo.
 
 img srcset takes one or more comma separated image specifiers. An
 image specifier consists of a URL to an image asset and an associated
 scale factor, expressed as a number followed by the literal character
 'x'. (The value of img src is treated as if it had a 1x scale
 specified, so you can avoid duplicate references to the base asset.)
 
 User Agents may make their asset selection before fetching any of the
 assets, thus avoiding multiple asset loads  the associated performance
 problems in constrained bandwidth environments.
 
 The intrinsic size of the img can be computed by dividing the
 intrinsic size of the actual image asset chosen with that asset's
 associated scale factor. Suppose that foo-lowres.jpg is 100x100 and
 foo-highres.jpg is 200x200 in the above example. If the UA chooses
 foo-lowres.jpg, it computes the intrisnic size as (100/1)x(100/1) =
 100x100. If the UA chooses foo-highres.jpg, it computes the intrisnic
 size as (200/2)x(200/2) = 100x100.
 
 A nice thing about this proposal is its backwards compatibility story.
 Browsers which don't yet support img srcset will simply use the asset
 referenced by img src. A polyfill could easily be written to check for
 img srcset  swap out a different asset into img src, much like
 existing libraries which check for data-fullsrc= or the like.
 
 Why provide a scale factor and not a media query? Well, media queries
 are claims about UA state, whereas here we're asserting something about
 the relationship between the image assets. Also, User Agents should be
 free to use whichever asset they deem best suited to their current
 situation, taking into account not just media-queriable things like
 device resolution but also any scaling applied to the img with CSS,
 its width= and height= attributes, or even things like the current
 page zoom level.
 
 Of course there are other things like bandwidth availability, data plan
 usage, etc. that web developers might want to take into account when
 choosing which image assets to load. This is definitely something worth
 exploring. In the future we could extend the asset descriptors to cover
 such cases. Something like this, maybe:
 
 img srcset=foo-lowres.jpg 1x low-bandwidth,
 foo-highres.jpg 2x high-bandwidth
 
 I'm purposefully not making a proposal for how to describe bandwidth,
 data plan usage, or such things here. Ultimately I don't think
 addressing the multiple-resolution case needs to wait for a solution to
 these other cases. We don't need to SOLVE ALL THE PROBLEMS! right now.
 
 One downside to this proposal is that the srcset= attribute takes a
 microsyntax, and as a rule we try to avoid novel microsyntaxes in
 attribute values. I think this particular microsyntax is pretty
 straightforward and shouldn't cause all that much confusion for authors.
 
 I think this is preferable to adding a suite of attributes with complex
 inter-relationships, such as in Anselm Hannemann's proposal from last
 August[3]. In such a proposal, we would either need to have a pre-
 approved list of image scales (like Anselm's xs, s, m, l, xl), which
 over-constrains designers' ability to create, or we would be introducing
 user data into attribute names which—with the one exception of the
 data-*= attributes—is something I really don't think we should do.
 
 Some have argued that we should just use conneg to serve the best
 image. This isn't an acceptable solution 

Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Tab Atkins Jr.
On Thu, May 10, 2012 at 4:45 PM, Mathew Marquis m...@matmarquis.com wrote:
 On May 10, 2012, at 8:36 AM, Scott González wrote:
 You should look into the previous discussions at
 http://www.w3.org/community/respimg/

 There's also a prototype using media queries at
 https://github.com/scottjehl/picturefill. I realize you specifically said
 you think media queries don't solve all of the problems, but it seems worth
 looking at.


 I can’t second Scott’s suggestion enough. There is a ton of history and 
 valuable conversation around this topic already in the Community Group, and 
 we’ve been working with a couple of browser reps trying to get this thing 
 solved. We’ve even gone so far as to put the solution that seems to have the 
 most legs together as a sort-of spec, so all the details are in one 
 easily-parsed place: https://github.com/Wilto/respimg

The Responsive Images work is intended to solve a different issue than
the send high-res versions if you have the screen and bandwidth to do
so.  It's for serving different images based on various MQ
conditions, just baked into HTML markup rather than hacking it in via
backgrounds.  MQs, though, are a fundamentally unsound method for
doing bandwidth-responsive image serving.  I gave the basic example of
why it fails in an earlier message in this thread.

~TJ


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Maciej Stachowiak

On May 10, 2012, at 6:24 AM, Tab Atkins Jr. jackalm...@gmail.com wrote:

 
 
 That all said, I don't like the 2x notation.  It's declaring this
 image's resolution is twice that of a normal image.  This has two
 problems.  For one, we already have a unit that means that - the dppx
 unit.  Using 2dppx is identical to the meaning of 2x.  Since
 image-set() is newer than the dppx unit, we should change it to use
 resolution instead.

dppx has the downside that not even CSS Working Group members can 
consistently spell it correctly.

Regards,
Maciej



Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Maciej Stachowiak

On May 10, 2012, at 6:47 AM, Simon Pieters sim...@opera.com wrote:

 On Thu, 10 May 2012 15:24:28 +0200, Tab Atkins Jr. jackalm...@gmail.com 
 wrote:
 
 For two, I'm not sure that it's particularly obvious that when you say
 2x, you should make sure your image was saved as 196dpi.  You have
 to already know what the default resolution is.  As well, I think that
 values like 300dpi are pretty common, and they don't map to integral
 'x' values.  If people say screw it and use 3x, this'll be
 slightly wrong and I think will cause ugly blurring.  If we make this
 take resolution, people can just use the dpi unit.
 
 Can we just use CSS's 'dpi' instead?
 
 img src=default.jpg srcset=highres.jpg 300dpi

CSS's 'dpi' is confusing, because it actually defines the ratio of device 
pixels to CSS inches, not device pixels to physical inches, as most users would 
expect 'dpi' to mean in the context of a graphics program. So 300dpi would mean 
the same thing as 3.125x, and would likely itself result in ugly blurring, 
since scaling by a fractional scale factor rarely looks crisp.

Regards,
Maciej



Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Maciej Stachowiak

On May 10, 2012, at 7:26 AM, Boris Zbarsky bzbar...@mit.edu wrote:

 On 5/10/12 10:19 AM, Mathew Marquis wrote:
 Hey guys. Don’t know if it’s too early to chime in with this, but we were 
 told by some members of the Chrome team that any browser that supports DNS 
 prefetching — including assets — wouldn’t consider “looking-ahead” on the 
 img tag as an option.
 
 Why not?  In any case, _DNS_ prefetching would be the same for both the 
 low-res and high-res image, I would think.
 
 The original src would be fetched in any case, saddling users with a 
 redundant download.
 
 That sounds like image prefetching, not DNS prefetching.  I see no obvious 
 reason it couldn't look at multiple attributes.


Indeed. I'm reasonably familiar with WebKit's preloading code and I see no 
reason it couldn't look at the srcset attribute. This would work fine for scale 
factor selection. Unfortunately, it would not work for the suggestion to have 
srcset pick images to fit available space based on width and height. Available 
space is not known until layout time, which happens too late for preloading 
decisions. So width/height fitting would defeat prefetch, regardless of 
specific syntax used.

Perhaps this is what the Chrome engineers were thinking of; hard to say without 
more detail.

Regards,
Maciej



Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Kornel Lesiński
On Thu, 10 May 2012 16:02:22 +0100, Tab Atkins Jr. jackalm...@gmail.com  
wrote:


I can’t second Scott’s suggestion enough. There is a ton of history and  
valuable conversation around this topic already in the Community Group,  
and we’ve been working with a couple of browser reps trying to get this  
thing solved. We’ve even gone so far as to put the solution that seems  
to have the most legs together as a sort-of spec, so all the details  
are in one easily-parsed place: https://github.com/Wilto/respimg


The Responsive Images work is intended to solve a different issue than
the send high-res versions if you have the screen and bandwidth to do
so.  It's for serving different images based on various MQ
conditions, just baked into HTML markup rather than hacking it in via
backgrounds.  MQs, though, are a fundamentally unsound method for
doing bandwidth-responsive image serving.  I gave the basic example of
why it fails in an earlier message in this thread.


Indeed. I think there's a confusion around this in general, and  
responsive images mean different things to different people.


While the solution that Responsive Images group leans towards is  
appropriate for solving layout problems, the description of group's goals  
sounds more like solving optimisation/dpi problems. I think these are  
orthogonal issues and both of them may be worth solving.



I've tried to sort problems/use-cases here:

http://www.w3.org/community/respimg/2012/04/16/summary-of-use-cases-and-requirements/

--
regards, Kornel Lesiński


Re: [whatwg] img srcset for responsive bitmapped content images

2012-05-10 Thread Kornel Lesiński
On Thu, 10 May 2012 21:18:41 +0100, Maciej Stachowiak m...@apple.com  
wrote:



For two, I'm not sure that it's particularly obvious that when you say
2x, you should make sure your image was saved as 196dpi.  You have
to already know what the default resolution is.  As well, I think that
values like 300dpi are pretty common, and they don't map to integral
'x' values.  If people say screw it and use 3x, this'll be
slightly wrong and I think will cause ugly blurring.  If we make this
take resolution, people can just use the dpi unit.


Can we just use CSS's 'dpi' instead?

img src=default.jpg srcset=highres.jpg 300dpi


CSS's 'dpi' is confusing, because it actually defines the ratio of  
device pixels to CSS inches, not device pixels to physical inches, as  
most users would expect 'dpi' to mean in the context of a graphics  
program. So 300dpi would mean the same thing as 3.125x, and would likely  
itself result in ugly blurring, since scaling by a fractional scale  
factor rarely looks crisp.


I doubt whether support for non-integer scale factors/arbitrary DPI is  
going to be useful in practice.


While it's relatively easy to resize photos for any DPI, it's not  
desirable from caching/processing perspective (hosting and serving as many  
different variants of a file as there are screen densities). A pragmatic  
solution is to have few sizes and serve a good enough size, which may as  
well be integer multiplies of a CSS pixel.


And when it's important to serve pixel-perfect images for arbitrary DPI,  
then probably it's equally important to have pixel-perfect CSS as well.  
Unfortunately, it's very hard to write device-pixel-perfect CSS for  
non-integer multiplies of a CSS pixel. I don't expect many (if any)  
authors to actually write `border: 0.6024096386px solid` to achieve this.


Most artists won't spend time to prepare dozens of pixel-perfect manually  
resized versions of icons for varying screen densities, so most of the  
time assets for resolutions between 1x and maximum will be automatically  
resized one way or another.


Therefore, I expect browsers/systems to continue using fake 96dpi/192dpi  
snapped to device pixels, and artists to focus only on those ratios. It's  
simplest for everybody and gives device-pixel-perfect rendering on varying  
screen densities.


--
regards, Kornel Lesiński