You are here
Blog
(Impatient? Play with the demo here.)
What’s Canvas Really Good For?
Canvas had, I’ll be honest, kind of bored me so far. Really? We’re back to drawing primitive lines, rectangles and arcs? In the great Flash vs. HTML5 debate, despite being an HTML guy, my feelings had been, “Not much is going to happen until there’s a tool as easy as Flash for building something interesting.”
Then I came across getImageData and putImageData.
(Links: whatwg.org and Mozilla Developer Central)
Inspiration
I was reading ajaxian.com’s article on Marco Lisci’s black and white canvas effects. It got me thinking: if black and white conversion is possible, what other cool image processing could we do?
Ideas
A blur of ideas tumbling out:
A lot of common filters (blur, sharpen, edge detect, emboss) use simple convolution matrixes. A 3x3 matrix involves sampling 9 points for every pixel and a little logic for the edges of images but could it be built fast enough to be usable in a browser?
Once I started playing with 3x3 convolution matrixes, I quickly realized they could be made to work with any size. Large ones get slow but it turns out Gaussian Blur can be built to work in one axis at a time so 5x5 (25 samples per point) can be written as 1x5 then 5x1 (10 samples per point).
Expanding Marco’s black and white conversion gets interesting as almost no one manages to use the correct, subtly different terms. Do we use the intensity (average of R,G,B)? HSV’s “hexcone” largest of R, G and B? HSL’s “bi-hexcone” average of the largest and smallest of R, G and B? Or lumiance, like Marco of 0.3R+0.59G+0.11B that maps closer to the human eye?
Once we pick a model for brightness/intensity, we can also add Hue and Saturation (credit goes to MJIJACKSON for speeding things up here). That gives us color shifting, increased and decreased saturation, etc.
If we are analyzing all of this information already, it’s trivial to add a color picker with sample, RGB and HSL values.
And wouldn’t a histogram be cool too?
As we are already looking at pixels, we can swap their X and Y axis (flip horizontal, flip vertical, rotate 180 if you do both) and 90 clockwise/counter-clockwise rotations.
And, of course, all of this needs a history and simple option for loading files.
Demo
As you can see, ideas flow once you get started. The attached demo is just a lazy Sunday’s coding so I’m not claiming the cleanest code, having got my head wrapped around every brightness/intensity argument or perfectly optimized everything but it’s a good example of the kind of potential Canvas can really have. Think of it as a showcase, not a tutorial.
I’ll probably write a few more posts over the next few days about specific things I ran in to, observations and the obvious things that are still missing. For now though, I’ll shut up and let you have a poke around.
Performance Note
On a reasonable laptop or desktop, running Safari or Chrome, the slowest code – the filters, take a second or so to run.
If you run it on Firefox on the same machine, it will often run about as fast but has been known to take several times as long.
If you run it on an iPad? Good luck. Most of the basic features work but filters really do push the poor device’s mobile processor too hard.
And Internet Explorer? Magical and sparkly things are promised for IE9. Until then, not so much without Chrome Frame.
Other references:
Blog
Press Releases
Digitaria CEO Dan Khabie Selected as New LinkedIn Influencer; Debuts Bi-weekly Column
Reigning 2012 CTO of the Year Chuck Phillips Judging Both San Diego Top Tech Exec Awards
Headlines
9 downloadable custom Google Analytics reports
5 hot social media tools
6 Tips to Build your Social Media Strategy
Events
KMart hits gold with new ads: First, get big gas savings: http://t.co/IgZq7S7BOJ then, ship your pants: https://t.co/6Q5PuBhCmT #marketing
How Twitter Is Reshaping The Future Of Storytelling (in 140 characters or less) http://t.co/TIdmdns0px via @FastCoExist #innovation
Lost In A Tornado, Found On Facebook: Social media group helps reunite owners with lost belongings http://t.co/zCnyMO9xr5 via @FastCompany
Get your fill with these 9 Downloadable Custom Google Analytics Reports by @5ftdynamite http://t.co/Z357MJzsAZ
