def rgb2Name(rgb): """Method to convert RGB to a name. Answer None if no name can be found. >>> rgb2Name((0.2, 0.3, 0.4)) in ('darkslategray', 'darkslategrey') True >>> color(spot=300).name in ('teal', 'darkcyan') True >>> color(spot=0).name 'black' >>> color(rgb=(0.4, 0.5, 0.6)).name in ('slategrey', 'slategray') True >>> color(cmyk=(0.2, 0.2, 0.6, 0.2)).name 'darkkhaki' >>> rgb = (0.4, 0.5, 0.6) >>> color(rgb=rgb).name == rgb2Name(rgb) True """ rgbName = None r, g, b = rgb error = None # Max error for the 3 colors for name, value in CSS_COLOR_NAMES.items(): nr, ng, nb = int2Rgb(value) e = abs(nr - r) + abs(ng - g) + abs(nb - b) if error is None or e < error: rgbName = name error = e return rgbName
def _get_name(self): u"""Answer the name of the CSS color that is closest to the current self.rgb >>> Color('red').name 'red' >>> Color(0x00fa9a).name 'mediumspringgreen' >>> Color(0x800000).name 'maroon' >>> Color(0x828085).name # Real value is 0x808080 'gray' >>> Color(0xffe4e1).name, Color(0xffe4f1).name, Color(0xffe4f8).name ('mistyrose', 'mistyrose', 'lavenderblush') """ if self._name is None: r, g, b = self.rgb error = 3 # Max error for the 3 colors for name, value in CSS_COLOR_NAMES.items(): nr, ng, nb = self.int2Rgb(value) e = abs(nr - r) + abs(ng - g) + abs(nb - b) if e < error: self._name = name error = e return self._name
def name2Rgb(name): """Method to convert a name to RGB. Answer None if no RGB can be found. >>> name2Rgb('red') (1, 0, 0) >>> name2Rgb('white') (1, 1, 1) >>> colorName = 'slategray' >>> # Get nearest rounded (r,g,b) for this spot color. >>> rgb = name2Rgb(colorName) >>> '%0.2f, %0.2f, %0.2f' % rgb '0.44, 0.50, 0.56' """ return int2Rgb(CSS_COLOR_NAMES.get(name))