[whatwg] Canvas operators (was Re: several messages)

Ian Hickson ian at hixie.ch
Tue Jan 15 18:48:39 PST 2008

On Sun, 20 May 2007, ddailey wrote:
> 1. Is there a way, using filters, to take an image A and produce its 
> photographic negative A', such that 255-C(A)=C(A') for each channel C in 
> {R,G,B)? I've fooled a bit with the filter "feComponentTransfer" with 
> some hints of success, but it seems like so natural a thing that there 
> must be a straightforward way that I'm just missing. Here is an approach 
> that comes close using <feComponentTransfer> together with <feComposite 
> operator="arithmetic">. 
> http://srufaculty.sru.edu/david.dailey/svg/ComponentTransferComposite.svg. 
> It produces an image which looks like a spectrum-equalized version of 
> the negative.

There is no way to do this using <canvas> globalCompositeOperation (1-A is 
not a PorterDuff operator), but you could do it manually using the 
getImageData()/putImageData() methods.

> 2. On a related theme, <feBlend/> has modes including "screen", 
> "multiply" etc. Is there a way to create the "difference" between two 
> images (as with the Photoshop difference filter) in SVG? Here's the best 
> I have figured out so far: 
> http://srufaculty.sru.edu/david.dailey/svg/ImageDiffer.svg . The ability 
> to calculate differences between images comes in quite handy, for 
> example, in explaining image compression to students, in scientific 
> image processing, and I believe in forensics as well.

You could use the <canvas> globalCompositeOperation "xor", does that do 
what you want?

> Another question arises in my mind in this context: is there any reason 
> that any of the treatments of these effects (like the Porter-Duff 
> operators, darken, saturate etc.) should be any different than they are 
> in the SVG spec? So many things that I see in the treatment of canvas 
> remind me of something so similar to what is in SVG that it makes me 
> wonder why not just reference say http://www.w3.org/TR/SVG/filters.html 
> ?

The <canvas> globalCompositeOperation is just defined in terms of 
PorterDuff, which far predates SVG.

> If indeed, my suspicion that 1 and 2, above, are not possible in current 
> approaches within SVG, then that would certainly justify a reopening and 
> augmentation of that treatment, but having come late to the discussions 
> about <canvas> and having not been involved in the discussions about the 
> SVG filters, I am a bit baffled by some of this. (Not that my state of 
> bafflement is anyone's problem but mine, mind you: I am well prepared to 
> deal with what I fear is a rather persistent condition.)

A future version may introduce new operators, but at this point it's 
probably best if we stabalise on the well-known PorterDuff operators.

Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list