- From: Michael Mullany <michael@sencha.com>
- Date: Mon, 14 Oct 2013 14:35:34 -0700
- To: Rik Cabanier <cabanier@gmail.com>
- Cc: "public-fx@w3.org" <public-fx@w3.org>
- Message-ID: <CABTYPJnHykVfvybqAA+zYb9gAE=UKUpHgtQsNShkn7EawroB4Q@mail.gmail.com>
On Mon, Oct 14, 2013 at 12:13 PM, Rik Cabanier <cabanier@gmail.com> wrote: > > > > On Mon, Oct 14, 2013 at 12:00 PM, Michael Mullany <michael@sencha.com>wrote: > >> On Mon, Oct 14, 2013 at 11:42 AM, Rik Cabanier <cabanier@gmail.com>wrote: >> >>> >>> >>> >>> On Sat, Oct 12, 2013 at 8:53 PM, Michael Mullany <michael@sencha.com>wrote: >>> >>>> If this has already been discussed and resolved at some stage, I >>>> apologize for the duplication + noise in advance. >>>> >>>> Prompted by a stack-overflow question on css filters, I did an >>>> experiment comparing the results of CSS hue-rotate() and saturate() filters >>>> with their manual equivalent (explicitly changing hsl() colors). >>>> >>>> Hue-rotate experiment here: http://codepen.io/mullany/pen/fxsuE >>>> Saturate experiment here: http://codepen.io/mullany/pen/rpgHu >>>> >>>> As you can see, the hue-rotate does a poor job of conserving saturation >>>> and lightness, and the saturate does a poor job of conserving lightness. >>>> These are extreme examples using fully saturated colors - less saturated >>>> and lighter colors don't seem to diverge quite so much as these do. >>>> >>>> I do understand that because these filters are a linear matrix >>>> approximation and remain in RGB space, there will be inaccuracies when >>>> trying to do HSL ops, but these seem very extreme to me, and very >>>> unexpected. But they seem to be consistent between Firefox and Webkit/Blink >>>> - (when converted to SVG equivalents) - so I do not think this is a bug. >>>> >>> >>> It's debatable if this is a bug. >>> The issue is that the output of the color matrix is clamped to 0-1 >>> before feeding into the next color matrix. This will lose information, >>> regardless of what colorspace you're working in. >>> >>> There was a discussion on this: >>> http://lists.w3.org/Archives/Public/public-fx/2013JulSep/0011.html >>> >> >> Both the hue-rotate and saturate ops are single feColorMatrix multiplies, >> so this is not a problem with clamping of intermediate outputs. As Chris >> says, I think this seems to be a problem with approximating an HSL op in >> RGB. >> > > That's true. There is still a question when the clamping happens. > You can define RGB values outside of [0...1] but afaik it's unclear when > they should be clamped. > > >> >>> >>>> >>>> Has there been any thought of converting content to HSL before applying >>>> these filter shorthands? Or adding true HSL primitives to the filter >>>> toolbox? (Something like an feFuncH or feFuncS). >>>> >>> >>> As Chris mentions, being able to switch the working colorspace to Lab >>> (not sure what CIELCHab is though) >>> However, doing so would require a whole new set of formulas in the >>> filters specification and a lot of work in the browsers... >>> >>> I don't know what the right answer is here. All I can say is that this >> has the potential to burn a lot of author hours as they try to figure out >> why a deceptively simple CSS rule doesn't actually do what it advertises. >> If they're using HSL color definitions, this will be doubly surprising. One >> option is to remove these specific shorthands. Could another be to default >> to polar-coordinates when applying these specific shorthands? >> > > How much more math would that introduce? If it is a lot, can it be > implemented in hardware on limited devices? > Are you aware of any user complaints (apart from yourself :-)) > > Only 2 so far, but I can blog about this and see how many people think it's a big deal. http://stackoverflow.com/questions/19187905/why-doesnt-hue-rotation-by-180deg-and-180deg-yield-the-original-color https://code.google.com/p/chromium/issues/detail?id=237524 -- www.sencha.com "Amazing Apps with Web Technologies"
Received on Monday, 14 October 2013 21:36:33 UTC