- From: Paul LeBeau <paul.lebeau@gmail.com>
- Date: Thu, 6 Nov 2014 22:07:07 +1300
- To: Benjamin Denckla <bdenckla@alum.mit.edu>
- Cc: Dirk Schulze <dschulze@adobe.com>, "public-fx@w3.org" <public-fx@w3.org>
- Message-ID: <CACfsppA1AOLu5TveXcFiqnkSmHSg7kCgHxbarUktLiXkUnaFww@mail.gmail.com>
It can be made to work with any background by tweaking the filter a little. We just need to use the original (well, inverted) image as a mask at the final step. <svg width="0" height="0"> <defs> <filter id="filter-inkscale" x="0" y="0" width="100%" height="100%"> <!-- invert the image so black on white becomes white on black --> <feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" result="inverted"/> <!-- create a mask so we can later blend with the background --> <feColorMatrix type="luminanceToAlpha" result="mask"/> <!-- convert image to 'currentColor' by multiplying the inverted image with an feFlood of the correct colour --> <feFlood flood-color="currentColor"/> <feBlend mode="multiply" in2="inverted"/> <!-- finally, mask out the result with the inverted original image --> <feComposite in2="mask" operator="in"/> </filter> </defs> </svg> Updated demo here: http://jsfiddle.net/py9q6z98/1/ Paul On 6 November 2014 18:17, Benjamin Denckla <bdenckla@alum.mit.edu> wrote: > Neat! Only works for a black background, though. > > On Wed, Nov 5, 2014 at 2:48 AM, Paul LeBeau <paul.lebeau@gmail.com> wrote: > >> Benjamin >> >> Perhaps I am missing something, but the effect you are after seems >> achieveable with SVG filters. <feFlood> can take currentColor. For >> example: >> >> <svg width="0" height="0"> >> <defs> >> <filter id="filter-inkscale" x="0" y="0" width="100%" >> height="100%"> >> <!-- invert the image --> >> <feColorMatrix in="SourceGraphic" type="matrix" >> values="-1 0 0 0 1 >> >> 0 -1 0 0 1 >> >> 0 0 -1 0 1 >> >> 0 0 0 1 0" result="inverted"/> >> <feFlood flood-color="currentColor"/> >> <feBlend mode="multiply" in2="inverted"/> >> </filter> >> </defs> >> </svg> >> >> Which AFAICS gives the desired effect described in the article you linked >> to. >> >> Demo here: http://jsfiddle.net/py9q6z98/ >> >> If you change the value of color in the CSS for the div, the image color >> changes to match the text color. >> >> Paul >> >> >> >> On 5 November 2014 19:19, Dirk Schulze <dschulze@adobe.com> wrote: >> >>> Hi Ben, >>> >>> On Nov 4, 2014, at 7:17 PM, Benjamin Denckla <bdenckla@alum.mit.edu> >>> wrote: >>> >>> > Thanks Dirk, for your response. >>> > >>> > Indeed "bitonal" was a poor word choice. I'm now using "inkscale" >>> instead. See >>> http://dencklatronic.blogspot.com/2014/10/more-on-bitonal-inkscale-images.html >>> . >>> > >>> > Indeed inkscale could be described as a gradient map with two color >>> stops. >>> > >>> > Perhaps Greenblatt could provide an example use of gradientmap.js >>> using the CSS currentColor variable? >>> > >>> > If that is possible, that could be used to implement transparent >>> inkscale. >>> > >>> > Opaque inkscale would require the background equivalent of >>> currentColor, which, oddly, does not seem to exist. >>> > >>> > Even if all that could be done, I do not feel inkscale should require >>> Javascript, in the long run. >>> > >>> > For one thing, this would prevent it from being used in the most >>> popular ebook format: Kindle. Javascript is not allowed in Kindle books, >>> nor would I expect Amazon to allow it anytime soon. >>> > >>> > For another, admittedly more vague thing, it feels like Javascript >>> should be used only as an "escape hatch" if you're doing something weird or >>> interactive. Inkscale is certainly not interactive. As to whether it is >>> weird, that is of course subjective. But I wonder if there is an analogy >>> with transparency. What if web standards were missing transparency, and >>> someone proposed a way to implement it in Javascript? That would be a great >>> workaround until the new standard was propagated to a reasonable percentage >>> of the installed base. But ultimately we would want to see transparency >>> available without Javascript. >>> >>> I first wanted to know if I understand you correctly. A JS prototype can >>> help to demonstrate issues. We will discuss adding this feature to the next >>> level of Filter Effects. >>> >>> Allowing currentColor for this kind of feature will have security >>> requirements. feColorMatrix would get one of the tainted filter primitives >>> and the filter can not be used cross origin. We have this problem with >>> feFlood, feDropShadow and other primitives[1] already. I do not see this as >>> a problem with that though. >>> >>> In your blog post you mentioned access to foreground and background >>> color. currentColor only can represent one color. How would you access the >>> other color? Also, currentColor represents the value of the ‘color’ >>> property on an ancestor. ‘color’ is used to style text in HTML and could >>> have unwanted affects to text there. A solution could be CSS Custom >>> properties[2] of course or the latest approach of "brand color” on WHATWG >>> mailing list. >>> >>> Greetings, >>> Dirk >>> >>> [1] http://dev.w3.org/fxtf/filters/#security >>> [2] http://dev.w3.org/csswg/css-variables/ >>> >>> >>> >>> > >>> > Ben >>> >>> >>> >> >
Received on Thursday, 6 November 2014 09:07:55 UTC