Despite being somewhat of a misnomer, the web safe color palette is indeed quite useful for color quantization. It's simple, fast, flexible, and ubiquitous. It also allows for RGB hex shorthand such as #369
instead of #336699
. Here's a walkthrough:
- Web safe colors are RGB triplets, with each value being one of the following six:
00, 33, 66, 99, CC, FF
. So we can divide the max RGB value 255
by five (one less than the total possible values) to get a multiple value, 51
.
- Normalize the channel value by dividing by
255
(this makes it a value from 0-1
instead of 0-255
).
- Multiply by
5
, and round the result to make sure it stays exact.
Multiply by 51
to get the final web safe value. All together, this looks something like:
def getNearestWebSafeColor(r, g, b):
r = int(round( ( r / 255.0 ) * 5 ) * 51)
g = int(round( ( g / 255.0 ) * 5 ) * 51)
b = int(round( ( b / 255.0 ) * 5 ) * 51)
return (r, g, b)
print getNearestWebSafeColor(65, 135, 211)
No need to go crazy comparing colors or creating huge lookup tables, as others have suggested. :-)