Last active
January 4, 2016 06:29
-
-
Save baverman/8582680 to your computer and use it in GitHub Desktop.
Revisions
-
baverman revised this gist
Jan 23, 2014 . 1 changed file with 36 additions and 4 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -251,15 +251,47 @@ def get_parts(c): return tuple(int(r, 16) for r in [c[:2], c[2:4], c[4:]]) def dumb(a, b): return (a[0] - b[0])**2 + (a[1] - b[1])**2 + (a[2] - b[2])**2 def rgb2xyz((r, g, b)): r /= 255.0 g /= 255.0 b /= 255.0 r = (((r + 0.055) / 1.055) ** 2.4) if r > 0.04045 else r / 12.92 g = (((g + 0.055) / 1.055) ** 2.4) if g > 0.04045 else g / 12.92 b = (((b + 0.055) / 1.055) ** 2.4) if b > 0.04045 else b / 12.92 x = r * 0.4124 + g * 0.3576 + b * 0.1805 y = r * 0.2126 + g * 0.7152 + b * 0.0722 z = r * 0.0193 + g * 0.1192 + b * 0.9505 return x, y, z def xyz2lab((x, y, z)): x /= 95.047 y /= 100.000 z /= 108.883 x = (x ** (1/3.0)) if x > 0.008856 else 7.787*x + 16/116.0 y = (y ** (1/3.0)) if y > 0.008856 else 7.787*y + 16/116.0 z = (z ** (1/3.0)) if z > 0.008856 else 7.787*z + 16/116.0 return 116*y - 16, 500 * (x - y), 200 * (y - z) def CIE76(a, b): return dumb(xyz2lab(rgb2xyz(a)), xyz2lab(rgb2xyz(b))) PARTED_COLORS = [(get_parts(c), idx, c) for idx, c in COLORS] def find_nearest(c, metric=dumb): cparts = get_parts(c) return min(PARTED_COLORS, key=lambda r: metric(r[0], cparts)) if __name__ == '__main__': print '{1} {2}'.format(*find_nearest(sys.argv[1], CIE76)) -
baverman renamed this gist
Jan 23, 2014 . 1 changed file with 0 additions and 0 deletions.There are no files selected for viewing
File renamed without changes. -
baverman created this gist
Jan 23, 2014 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,265 @@ #!/usr/bin/env python2 import sys COLORS = [ ('16', '000000'), ('17', '00005f'), ('18', '000087'), ('19', '0000af'), ('20', '0000d7'), ('21', '0000ff'), ('22', '005f00'), ('23', '005f5f'), ('24', '005f87'), ('25', '005faf'), ('26', '005fd7'), ('27', '005fff'), ('28', '008700'), ('29', '00875f'), ('30', '008787'), ('31', '0087af'), ('32', '0087d7'), ('33', '0087ff'), ('34', '00af00'), ('35', '00af5f'), ('36', '00af87'), ('37', '00afaf'), ('38', '00afd7'), ('39', '00afff'), ('40', '00d700'), ('41', '00d75f'), ('42', '00d787'), ('43', '00d7af'), ('44', '00d7d7'), ('45', '00d7ff'), ('46', '00ff00'), ('47', '00ff5f'), ('48', '00ff87'), ('49', '00ffaf'), ('50', '00ffd7'), ('51', '00ffff'), ('52', '5f0000'), ('53', '5f005f'), ('54', '5f0087'), ('55', '5f00af'), ('56', '5f00d7'), ('57', '5f00ff'), ('58', '5f5f00'), ('59', '5f5f5f'), ('60', '5f5f87'), ('61', '5f5faf'), ('62', '5f5fd7'), ('63', '5f5fff'), ('64', '5f8700'), ('65', '5f875f'), ('66', '5f8787'), ('67', '5f87af'), ('68', '5f87d7'), ('69', '5f87ff'), ('70', '5faf00'), ('71', '5faf5f'), ('72', '5faf87'), ('73', '5fafaf'), ('74', '5fafd7'), ('75', '5fafff'), ('76', '5fd700'), ('77', '5fd75f'), ('78', '5fd787'), ('79', '5fd7af'), ('80', '5fd7d7'), ('81', '5fd7ff'), ('82', '5fff00'), ('83', '5fff5f'), ('84', '5fff87'), ('85', '5fffaf'), ('86', '5fffd7'), ('87', '5fffff'), ('88', '870000'), ('89', '87005f'), ('90', '870087'), ('91', '8700af'), ('92', '8700d7'), ('93', '8700ff'), ('94', '875f00'), ('95', '875f5f'), ('96', '875f87'), ('97', '875faf'), ('98', '875fd7'), ('99', '875fff'), ('100', '878700'), ('101', '87875f'), ('102', '878787'), ('103', '8787af'), ('104', '8787d7'), ('105', '8787ff'), ('106', '87af00'), ('107', '87af5f'), ('108', '87af87'), ('109', '87afaf'), ('110', '87afd7'), ('111', '87afff'), ('112', '87d700'), ('113', '87d75f'), ('114', '87d787'), ('115', '87d7af'), ('116', '87d7d7'), ('117', '87d7ff'), ('118', '87ff00'), ('119', '87ff5f'), ('120', '87ff87'), ('121', '87ffaf'), ('122', '87ffd7'), ('123', '87ffff'), ('124', 'af0000'), ('125', 'af005f'), ('126', 'af0087'), ('127', 'af00af'), ('128', 'af00d7'), ('129', 'af00ff'), ('130', 'af5f00'), ('131', 'af5f5f'), ('132', 'af5f87'), ('133', 'af5faf'), ('134', 'af5fd7'), ('135', 'af5fff'), ('136', 'af8700'), ('137', 'af875f'), ('138', 'af8787'), ('139', 'af87af'), ('140', 'af87d7'), ('141', 'af87ff'), ('142', 'afaf00'), ('143', 'afaf5f'), ('144', 'afaf87'), ('145', 'afafaf'), ('146', 'afafd7'), ('147', 'afafff'), ('148', 'afd700'), ('149', 'afd75f'), ('150', 'afd787'), ('151', 'afd7af'), ('152', 'afd7d7'), ('153', 'afd7ff'), ('154', 'afff00'), ('155', 'afff5f'), ('156', 'afff87'), ('157', 'afffaf'), ('158', 'afffd7'), ('159', 'afffff'), ('160', 'd70000'), ('161', 'd7005f'), ('162', 'd70087'), ('163', 'd700af'), ('164', 'd700d7'), ('165', 'd700ff'), ('166', 'd75f00'), ('167', 'd75f5f'), ('168', 'd75f87'), ('169', 'd75faf'), ('170', 'd75fd7'), ('171', 'd75fff'), ('172', 'd78700'), ('173', 'd7875f'), ('174', 'd78787'), ('175', 'd787af'), ('176', 'd787d7'), ('177', 'd787ff'), ('178', 'd7af00'), ('179', 'd7af5f'), ('180', 'd7af87'), ('181', 'd7afaf'), ('182', 'd7afd7'), ('183', 'd7afff'), ('184', 'd7d700'), ('185', 'd7d75f'), ('186', 'd7d787'), ('187', 'd7d7af'), ('188', 'd7d7d7'), ('189', 'd7d7ff'), ('190', 'd7ff00'), ('191', 'd7ff5f'), ('192', 'd7ff87'), ('193', 'd7ffaf'), ('194', 'd7ffd7'), ('195', 'd7ffff'), ('196', 'ff0000'), ('197', 'ff005f'), ('198', 'ff0087'), ('199', 'ff00af'), ('200', 'ff00d7'), ('201', 'ff00ff'), ('202', 'ff5f00'), ('203', 'ff5f5f'), ('204', 'ff5f87'), ('205', 'ff5faf'), ('206', 'ff5fd7'), ('207', 'ff5fff'), ('208', 'ff8700'), ('209', 'ff875f'), ('210', 'ff8787'), ('211', 'ff87af'), ('212', 'ff87d7'), ('213', 'ff87ff'), ('214', 'ffaf00'), ('215', 'ffaf5f'), ('216', 'ffaf87'), ('217', 'ffafaf'), ('218', 'ffafd7'), ('219', 'ffafff'), ('220', 'ffd700'), ('221', 'ffd75f'), ('222', 'ffd787'), ('223', 'ffd7af'), ('224', 'ffd7d7'), ('225', 'ffd7ff'), ('226', 'ffff00'), ('227', 'ffff5f'), ('228', 'ffff87'), ('229', 'ffffaf'), ('230', 'ffffd7'), ('231', 'ffffff'), # Gray-scale range. ('232', '080808'), ('233', '121212'), ('234', '1c1c1c'), ('235', '262626'), ('236', '303030'), ('237', '3a3a3a'), ('238', '444444'), ('239', '4e4e4e'), ('240', '585858'), ('241', '626262'), ('242', '6c6c6c'), ('243', '767676'), ('244', '808080'), ('245', '8a8a8a'), ('246', '949494'), ('247', '9e9e9e'), ('248', 'a8a8a8'), ('249', 'b2b2b2'), ('250', 'bcbcbc'), ('251', 'c6c6c6'), ('252', 'd0d0d0'), ('253', 'dadada'), ('254', 'e4e4e4'), ('255', 'eeeeee'), ] def get_parts(c): return tuple(int(r, 16) for r in [c[:2], c[2:4], c[4:]]) def get_dist(a, b): return (a[0] - b[0])**2 + (a[1] - b[1])**2 + (a[2] - b[2])**2 PARTED_COLORS = [(get_parts(c), idx, c) for idx, c in COLORS] def find_nearest(c): cparts = get_parts(c) return min(PARTED_COLORS, key=lambda r: get_dist(r[0], cparts)) if __name__ == '__main__': print '{1} {2}'.format(*find_nearest(sys.argv[1]))