Background
So, I'm working on a fresh iteration of a web app. And, we've found that our users are obsessed with being lazy. Really lazy. In fact, the more work we do for them, the more they love the service. A portion of the existing app requires the user to select a color scheme to use. However, we have an image (a screenshot of the user's website), so why can't we just satiate their laziness and do it for them? Answer: We can, and it will be a fun programming exercise! :)
The Challenge
Given an image, how do you create a corresponding color scheme? In other words, how do you select the primary X colors in an image (where X is defined by the web app). The image used in our particular situation is a screenshot of the user's website, taken at full resolution (e.g. 1280x1024). (Note:Please simply describe your algorithm - there's no need to post actual pseudocode.)
Bonus points (street cred points, not actual SO points) for:
- Describing an algorithm that is simple yet effective. Code is how we create - keep it simple and beautiful.
- Allowing the user to tweak the color scheme according to various 'moods' such as 'Colorful', 'Bright', 'Muted', 'Deep', etc. (a la Kuler)
- Describing a method for reliably determining the main text color used in the website screenshot (will likely require its own, separate, algo).
Inspiration
There are several existing sites that perform a similar function. Feel free to check them out and ask yourself, "How would I duplicate this? How could I improve it?"
- http://www.pictaculous.com/
- http://www.cssdrive.com/imagepalette/index.php
- http://kuler.adobe.com/#create/fromanimage