On Apr 27, 2012, at 2:49 PM, Jason H <[email protected]> wrote:

> 1. To my knowledge w3c has never specified file naming conventions. Maybe 
> extensions, as they are related to mime types, but this would be a new 
> function of filename itself that would affect rendeing quality. What about 
> images that already exist out there that are named as such? No, we should not 
> use the filename for metadata. 

But it's what humans are already using, and it allows for a powerful and 
flexible system. Perhaps we should start using the file name and filename 
extension as  meta data, and not make our lives harder than they need to be.



> 2. The user agent can use Javascript to do this already. 

How can this be standardized, where the various browsers make an informed 
decision which image scale to request?


> 3. The JS method is backwards compatible and requires no changes. To say it 
> degrades gracefully, I think is the wrong direction. Initial sources should 
> be low-res, then upgrade accordingly. 

That's how this works. You have the following code:
<meta image-scaling={2,"_2x"} />
<img src="path/to/filename.ext" />

And then the browser loads the 2x asset at 'path/to/filename_2x.ext' if it 
understands the image-scaling meta attribute, or just the default 1x asset at 
'path/to/filename.ext/' otherwise.


> 
> From: Tom Penzer <[email protected]>
> To: Jason H <[email protected]> 
> Cc: "[email protected]" <[email protected]> 
> Sent: Friday, April 27, 2012 4:57 PM
> Subject: Re: Image Scaling for High-Pixel-Density (i.e. Retina) Displays - 
> Re: -webkit-image-set and <image>
> 
> The main advantages of doing it this way are:
> 1) You don't need to specify a different path for every scale of every image 
> if you follow a naming convention.
> 2) the user agent makes the decision of which asset to request (based on 
> factors such as screen resolution and network quality/value of bandwidth)
> 3) It's backwards-compatible and degrades gracefully.
> 
> -Tom
> 
> 
> On Apr 27, 2012, at 1:50 PM, Jason H <[email protected]> wrote:
> 
>> I think the approach of attacking it from setting a scaling is wrong.
>> The real approach is to set the final dimensions, and let the software give 
>> the appropriate scaling based on the image metadata.
>> 
>> If you want a double-density image, you're just asking for 100x100 to be 
>> rendered in 50x50. The image tag already supports this. <IMG HEIGHT=50 
>> WIDTH=50 SRC="100x100.png"/> Far too often it is implied that the display 
>> density is identical to the sampling (pixel density) by not including the 
>> height and width attributes.
>> 
>> The real challenge as I see it, is having an efficient way of not sending 
>> over-sampled data across the wire, unless you mean to. Sending a double 
>> density image actually sends 4 times the data as a native resolution image. 
>> I would suggest we leave it up to java script to handle the pixel density 
>> matching, where it can dynamically assign the assets to the proper 
>> size-density, if needed. For the most part pick something not over sampled 
>> and let the browser scale it up if need be. A server-component could 
>> dynamically render and cache the common sizes of an image. But I don't see a 
>> need to change HTML.
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> From: Tom Penzer <[email protected]>
>> To: [email protected] 
>> Sent: Friday, April 27, 2012 3:47 PM
>> Subject: Image Scaling for High-Pixel-Density (i.e. Retina) Displays - Re: 
>> -webkit-image-set and <image>
>> 
>> Hi everybody,
>> 
>> I'm seeking feedback for my (hopefully relatively painless in practice 
>> compared to the alternatives - i.e. -webkit-image-set and html5 <image>) 
>> proposal to solve the problem of 2x-res (double-resolution) images with our 
>> current HTML and CSS standards for devices with high-resolution displays, 
>> such as 3rd Generation iPads and 4th generation iPhones and newer.
>> 
>> We add the following elements:
>> 
>> 1) The new 'meta' attribute 'image-scaling' with arguments listed in the 
>> format {'scaling factor', 'scaling filename key'}, where the filename key is 
>> the often-standardized string added to the filename for 2x assets, i.e. 
>> '_2x' (it might even be possible to specify a different filename extension 
>> for the 2x asset by detecting whether the 'scaling filename key' string 
>> contains a period i.e. 'xxx.xxx'). Sub-attributes to the 'image-scaling' 
>> attribute would include the optional boolean (defaulted to 'true') attribute 
>> 'assume-present', and potentially the optional attribute 
>> 'image-scaling-path' for cases where sites store their various scaled image 
>> assets in different directories than their 1x images.
>> 
>> 2) A new series of optional attributes to the img tag named after the 
>> scaling factor, i.e. '2x', '4x', etc., (possible values include 'true', 
>> 'false', a string for the double-res filename key, or 'url()' to specify a 
>> completely different path for the asset corresponding to that scaling factor)
>> 
>> 3) A series of new optional CSS properties named after the scaling factor, 
>> i.e. 'background-image-2x', 'border-image-2x' and 'list-style-image-2x' 
>> (possible values for these include 'true', 'false', a string for the 
>> double-res filename key, or 'url()').
>> 
>> A simple example usage of these new capabilities would be the following:
>> 
>> <meta image-scaling="{2,'_2x'}" />
>> 
>> The effect of adding this single line to the page would be that a user agent 
>> that wishes to display double-res images would then attempt to access 
>> 'filename_2x.ext' whenever it encounters an img tag like '<img 
>> url=("filename.ext") />', or a CSS property like '.class {background-image: 
>> url("filename.ext");}', '.class {border-image: url("filename.ext");}' or 
>> '.class {list-style-image: url("filename.ext");}'. For all these, in the 
>> case that the 'filename_2x.ext' file does not exist, a second request is 
>> made for 'filename.ext'.
>> 
>> If the bulk of the 2x-resolution images are located in a different directory 
>> than the 1x assets, the meta tag could be extended as such:
>> 
>> <meta image-scaling="{2,'_2x'}" image-scaling-path="{2,'2x_images/'}" />
>> 
>> Then, any 2x img or css-image assets would be requested from 
>> '2x_images/filename_2x.ext' instead of 'images/filename.ext'.
>> 
>> If a particular 2x img tag asset or css-image asset has a '@2x' 
>> double-resolution filename key instead of '_2x' for some reason (maybe 
>> you're integrating with some 3rd party off-site content with a different 2x 
>> naming convention), you could add a '2x' attribute to its img tag, such as 
>> '<img 2x="@2x" />', or to its css properties, such as '.class 
>> {background-image-2x: "@2x";}'.
>> 
>> If a particular 2x-resolution img tag asset or css-image asset is not 
>> located in the same directory as the 1x asset, or if the filenames and/or 
>> file formats are not identical to the 1x asset, a separate path could be 
>> specified by doing this: '<img 2x=url("path/to/[email protected]") />', or to 
>> its css properties by doing: '.class {background-image-2x: 
>> url("path/to/[email protected]");}'.
>> 
>> In the case that a majority, but not all img and css-image assets are 
>> available in 2x resolution, the img assets that lack a 2x version would 
>> include the a tag such as, '<img 2x=false />, or a css property such as 
>> '.class{background-image-2x: false;}'.
>> 
>> In the case that a majority, but not all img and css-image assets are 
>> unavailable in 2x resolution, you would add the 'assume-present="{2,false}' 
>> attribute to the meta 'image-scaling' attribute, such as '<meta 
>> image-scaling="{2,'_2x'}" assume-present="{2,false}" />', and use the '2x' 
>> attribute to flag img assets with a double-resolution asset available, such 
>> as '<img 2x=true />, and the css with '.class {background-image-2x: true;}'.
>> 
>> In the case that no double-resolution image assets are available, the meta 
>> 'image-scaling' attribute can be simply omitted.
>> 
>> By using this approach, we avoid the need to specify the same list of 
>> filenames varying only by scaling factor filename key for every single image 
>> asset, which is a bunch of busy work that just seems extremely redundant and 
>> clumsy to me. We are also able to achieve the same level of performance for 
>> those willing to put in the extra work to flag assets that deviate from the 
>> default setting (to minimize requests), and we allow the flexibility to be 
>> lazy or wrong, and have the user agent make two requests in those cases. 
>> This solution is also completely backwards-compatible with existing browsers.
>> 
>> As a corollary to this, a similar approach could be used to add support for 
>> different image formats without losing backwards-compatibility, and again 
>> saving many precious developer-years. Imagine <meta 
>> image-formats="{jpeg2000, '.jp2'}" assume-present="{jpeg2000,boolean}" />
>> 
>> -Tom Penzer
>> humble web coding noob
>> 
>> 
>> 
>> 
> 
> 

Reply via email to