diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index f8f78c52..39a2f988 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -158,3 +158,6 @@ - Fedor Morozov Drawing: Wu's anti-aliased circle + +- Michael Hansen + novice submodule diff --git a/skimage/data/block.png b/skimage/data/block.png new file mode 100644 index 00000000..cd981597 Binary files /dev/null and b/skimage/data/block.png differ diff --git a/skimage/data/elephant.png b/skimage/data/elephant.png new file mode 100644 index 00000000..d75b0a1f Binary files /dev/null and b/skimage/data/elephant.png differ diff --git a/skimage/novice/__init__.py b/skimage/novice/__init__.py new file mode 100644 index 00000000..bde59b3f --- /dev/null +++ b/skimage/novice/__init__.py @@ -0,0 +1,69 @@ +""" +skimage.novice +============== +A special Python image submodule for beginners. + +Description +----------- +skimage.novice provides a simple image manipulation interface for beginners. +It allows for easy loading, manipulating, and saving of image files. + +NOTE: This module uses the Cartesian coordinate system! + +Example +------- + + >>> from skimage import novice # special submodule for beginners + + >>> picture = novice.open('sample.png') # create a picture object from a file + >>> print picture.format # pictures know their format... + 'png' + >>> print picture.path # ...and where they came from... + '/Users/example/sample.png' + >>> print picture.size # ...and their size + (665, 500) + >>> print picture.width # 'width' and 'height' also exposed + 665 + >>> picture.size = (200, 250) # changing size automatically resizes + >>> for pixel in picture: # can iterate over pixels + >>> ... if ((pixel.red > 128) and # pixels have RGB (values are 0-255)... + >>> ... (pixel.x < picture.width)): # ...and know where they are + >>> ... pixel.red /= 2 # pixel is an alias into the picture + >>> ... + >>> print picture.modified # pictures know if their pixels are dirty + True + >>> print picture.path # picture no longer corresponds to file + None + >>> picture[0:20, 0:20] = (0, 0, 0) # overwrite lower-left rectangle with black + >>> picture.save('sample-bluegreen.jpg') # guess file type from suffix + >>> print picture.path # picture now corresponds to file + '/Users/example/sample-bluegreen.jpg' + >>> print picture.format # ...has a different format + jpeg + >>> print picture.modified # and is now in sync + False +""" + +import os as _os +from .colors import * +from .novice import Picture + +def open(path): + """ + Creates a new Picture object from the given image path + """ + return Picture(path=_os.path.abspath(path)) + +def new(size, color=None): + """ + Create a new RGB picture of the given size, initialized to the + given color or to black if none is provided. + """ + return Picture(size=size, color=color) + +def copy(image): + """ + Creates a Picture using the supplied image data + (e.g., skimage.data.elephant()). + """ + return Picture(image=image) diff --git a/skimage/novice/colors.csv b/skimage/novice/colors.csv new file mode 100644 index 00000000..05e78540 --- /dev/null +++ b/skimage/novice/colors.csv @@ -0,0 +1,865 @@ +air_force_blue_raf,"Air Force Blue (Raf)",#5d8aa8,93,138,168 +air_force_blue_usaf,"Air Force Blue (Usaf)",#00308f,0,48,143 +air_superiority_blue,"Air Superiority Blue",#72a0c1,114,160,193 +alabama_crimson,"Alabama Crimson",#a32638,163,38,56 +alice_blue,"Alice Blue",#f0f8ff,240,248,255 +alizarin_crimson,"Alizarin Crimson",#e32636,227,38,54 +alloy_orange,"Alloy Orange",#c46210,196,98,16 +almond,Almond,#efdecd,239,222,205 +amaranth,Amaranth,#e52b50,229,43,80 +amber,Amber,#ffbf00,255,191,0 +amber_sae_ece,"Amber (Sae/Ece)",#ff7e00,255,126,0 +american_rose,"American Rose",#ff033e,255,3,62 +amethyst,Amethyst,#96c,153,102,204 +android_green,"Android Green",#a4c639,164,198,57 +anti_flash_white,"Anti-Flash White",#f2f3f4,242,243,244 +antique_brass,"Antique Brass",#cd9575,205,149,117 +antique_fuchsia,"Antique Fuchsia",#915c83,145,92,131 +antique_ruby,"Antique Ruby",#841b2d,132,27,45 +antique_white,"Antique White",#faebd7,250,235,215 +ao_english,"Ao (English)",#008000,0,128,0 +apple_green,"Apple Green",#8db600,141,182,0 +apricot,Apricot,#fbceb1,251,206,177 +aqua,Aqua,#0ff,0,255,255 +aquamarine,Aquamarine,#7fffd4,127,255,212 +army_green,"Army Green",#4b5320,75,83,32 +arsenic,Arsenic,#3b444b,59,68,75 +arylide_yellow,"Arylide Yellow",#e9d66b,233,214,107 +ash_grey,"Ash Grey",#b2beb5,178,190,181 +asparagus,Asparagus,#87a96b,135,169,107 +atomic_tangerine,"Atomic Tangerine",#f96,255,153,102 +auburn,Auburn,#a52a2a,165,42,42 +aureolin,Aureolin,#fdee00,253,238,0 +aurometalsaurus,Aurometalsaurus,#6e7f80,110,127,128 +avocado,Avocado,#568203,86,130,3 +azure,Azure,#007fff,0,127,255 +azure_mist_web,"Azure Mist/Web",#f0ffff,240,255,255 +baby_blue,"Baby Blue",#89cff0,137,207,240 +baby_blue_eyes,"Baby Blue Eyes",#a1caf1,161,202,241 +baby_pink,"Baby Pink",#f4c2c2,244,194,194 +ball_blue,"Ball Blue",#21abcd,33,171,205 +banana_mania,"Banana Mania",#fae7b5,250,231,181 +banana_yellow,"Banana Yellow",#ffe135,255,225,53 +barn_red,"Barn Red",#7c0a02,124,10,2 +battleship_grey,"Battleship Grey",#848482,132,132,130 +bazaar,Bazaar,#98777b,152,119,123 +beau_blue,"Beau Blue",#bcd4e6,188,212,230 +beaver,Beaver,#9f8170,159,129,112 +beige,Beige,#f5f5dc,245,245,220 +big_dip_o_ruby,"Big Dip O’Ruby",#9c2542,156,37,66 +bisque,Bisque,#ffe4c4,255,228,196 +bistre,Bistre,#3d2b1f,61,43,31 +bittersweet,Bittersweet,#fe6f5e,254,111,94 +bittersweet_shimmer,"Bittersweet Shimmer",#bf4f51,191,79,81 +black,Black,#000,0,0,0 +black_bean,"Black Bean",#3d0c02,61,12,2 +black_leather_jacket,"Black Leather Jacket",#253529,37,53,41 +black_olive,"Black Olive",#3b3c36,59,60,54 +blanched_almond,"Blanched Almond",#ffebcd,255,235,205 +blast_off_bronze,"Blast-Off Bronze",#a57164,165,113,100 +bleu_de_france,"Bleu De France",#318ce7,49,140,231 +blizzard_blue,"Blizzard Blue",#ace5ee,172,229,238 +blond,Blond,#faf0be,250,240,190 +blue,Blue,#00f,0,0,255 +blue_bell,"Blue Bell",#a2a2d0,162,162,208 +blue_crayola,"Blue (Crayola)",#1f75fe,31,117,254 +blue_gray,"Blue Gray",#69c,102,153,204 +blue_green,Blue-Green,#0d98ba,13,152,186 +blue_munsell,"Blue (Munsell)",#0093af,0,147,175 +blue_ncs,"Blue (Ncs)",#0087bd,0,135,189 +blue_pigment,"Blue (Pigment)",#339,51,51,153 +blue_ryb,"Blue (Ryb)",#0247fe,2,71,254 +blue_sapphire,"Blue Sapphire",#126180,18,97,128 +blue_violet,Blue-Violet,#8a2be2,138,43,226 +blush,Blush,#de5d83,222,93,131 +bole,Bole,#79443b,121,68,59 +bondi_blue,"Bondi Blue",#0095b6,0,149,182 +bone,Bone,#e3dac9,227,218,201 +boston_university_red,"Boston University Red",#c00,204,0,0 +bottle_green,"Bottle Green",#006a4e,0,106,78 +boysenberry,Boysenberry,#873260,135,50,96 +brandeis_blue,"Brandeis Blue",#0070ff,0,112,255 +brass,Brass,#b5a642,181,166,66 +brick_red,"Brick Red",#cb4154,203,65,84 +bright_cerulean,"Bright Cerulean",#1dacd6,29,172,214 +bright_green,"Bright Green",#6f0,102,255,0 +bright_lavender,"Bright Lavender",#bf94e4,191,148,228 +bright_maroon,"Bright Maroon",#c32148,195,33,72 +bright_pink,"Bright Pink",#ff007f,255,0,127 +bright_turquoise,"Bright Turquoise",#08e8de,8,232,222 +bright_ube,"Bright Ube",#d19fe8,209,159,232 +brilliant_lavender,"Brilliant Lavender",#f4bbff,244,187,255 +brilliant_rose,"Brilliant Rose",#ff55a3,255,85,163 +brink_pink,"Brink Pink",#fb607f,251,96,127 +british_racing_green,"British Racing Green",#004225,0,66,37 +bronze,Bronze,#cd7f32,205,127,50 +brown_traditional,"Brown (Traditional)",#964b00,150,75,0 +brown_web,"Brown (Web)",#a52a2a,165,42,42 +bubble_gum,"Bubble Gum",#ffc1cc,255,193,204 +bubbles,Bubbles,#e7feff,231,254,255 +buff,Buff,#f0dc82,240,220,130 +bulgarian_rose,"Bulgarian Rose",#480607,72,6,7 +burgundy,Burgundy,#800020,128,0,32 +burlywood,Burlywood,#deb887,222,184,135 +burnt_orange,"Burnt Orange",#c50,204,85,0 +burnt_sienna,"Burnt Sienna",#e97451,233,116,81 +burnt_umber,"Burnt Umber",#8a3324,138,51,36 +byzantine,Byzantine,#bd33a4,189,51,164 +byzantium,Byzantium,#702963,112,41,99 +cadet,Cadet,#536872,83,104,114 +cadet_blue,"Cadet Blue",#5f9ea0,95,158,160 +cadet_grey,"Cadet Grey",#91a3b0,145,163,176 +cadmium_green,"Cadmium Green",#006b3c,0,107,60 +cadmium_orange,"Cadmium Orange",#ed872d,237,135,45 +cadmium_red,"Cadmium Red",#e30022,227,0,34 +cadmium_yellow,"Cadmium Yellow",#fff600,255,246,0 +caf_au_lait,"Café Au Lait",#a67b5b,166,123,91 +caf_noir,"Café Noir",#4b3621,75,54,33 +cal_poly_green,"Cal Poly Green",#1e4d2b,30,77,43 +cambridge_blue,"Cambridge Blue",#a3c1ad,163,193,173 +camel,Camel,#c19a6b,193,154,107 +cameo_pink,"Cameo Pink",#efbbcc,239,187,204 +camouflage_green,"Camouflage Green",#78866b,120,134,107 +canary_yellow,"Canary Yellow",#ffef00,255,239,0 +candy_apple_red,"Candy Apple Red",#ff0800,255,8,0 +candy_pink,"Candy Pink",#e4717a,228,113,122 +capri,Capri,#00bfff,0,191,255 +caput_mortuum,"Caput Mortuum",#592720,89,39,32 +cardinal,Cardinal,#c41e3a,196,30,58 +caribbean_green,"Caribbean Green",#0c9,0,204,153 +carmine,Carmine,#960018,150,0,24 +carmine_m_p,"Carmine (M&P)",#d70040,215,0,64 +carmine_pink,"Carmine Pink",#eb4c42,235,76,66 +carmine_red,"Carmine Red",#ff0038,255,0,56 +carnation_pink,"Carnation Pink",#ffa6c9,255,166,201 +carnelian,Carnelian,#b31b1b,179,27,27 +carolina_blue,"Carolina Blue",#99badd,153,186,221 +carrot_orange,"Carrot Orange",#ed9121,237,145,33 +catalina_blue,"Catalina Blue",#062a78,6,42,120 +ceil,Ceil,#92a1cf,146,161,207 +celadon,Celadon,#ace1af,172,225,175 +celadon_blue,"Celadon Blue",#007ba7,0,123,167 +celadon_green,"Celadon Green",#2f847c,47,132,124 +celeste_colour,"Celeste (Colour)",#b2ffff,178,255,255 +celestial_blue,"Celestial Blue",#4997d0,73,151,208 +cerise,Cerise,#de3163,222,49,99 +cerise_pink,"Cerise Pink",#ec3b83,236,59,131 +cerulean,Cerulean,#007ba7,0,123,167 +cerulean_blue,"Cerulean Blue",#2a52be,42,82,190 +cerulean_frost,"Cerulean Frost",#6d9bc3,109,155,195 +cg_blue,"Cg Blue",#007aa5,0,122,165 +cg_red,"Cg Red",#e03c31,224,60,49 +chamoisee,Chamoisee,#a0785a,160,120,90 +champagne,Champagne,#fad6a5,250,214,165 +charcoal,Charcoal,#36454f,54,69,79 +charm_pink,"Charm Pink",#e68fac,230,143,172 +chartreuse_traditional,"Chartreuse (Traditional)",#dfff00,223,255,0 +chartreuse_web,"Chartreuse (Web)",#7fff00,127,255,0 +cherry,Cherry,#de3163,222,49,99 +cherry_blossom_pink,"Cherry Blossom Pink",#ffb7c5,255,183,197 +chestnut,Chestnut,#cd5c5c,205,92,92 +china_pink,"China Pink",#de6fa1,222,111,161 +china_rose,"China Rose",#a8516e,168,81,110 +chinese_red,"Chinese Red",#aa381e,170,56,30 +chocolate_traditional,"Chocolate (Traditional)",#7b3f00,123,63,0 +chocolate_web,"Chocolate (Web)",#d2691e,210,105,30 +chrome_yellow,"Chrome Yellow",#ffa700,255,167,0 +cinereous,Cinereous,#98817b,152,129,123 +cinnabar,Cinnabar,#e34234,227,66,52 +cinnamon,Cinnamon,#d2691e,210,105,30 +citrine,Citrine,#e4d00a,228,208,10 +classic_rose,"Classic Rose",#fbcce7,251,204,231 +cobalt,Cobalt,#0047ab,0,71,171 +cocoa_brown,"Cocoa Brown",#d2691e,210,105,30 +coffee,Coffee,#6f4e37,111,78,55 +columbia_blue,"Columbia Blue",#9bddff,155,221,255 +congo_pink,"Congo Pink",#f88379,248,131,121 +cool_black,"Cool Black",#002e63,0,46,99 +cool_grey,"Cool Grey",#8c92ac,140,146,172 +copper,Copper,#b87333,184,115,51 +copper_crayola,"Copper (Crayola)",#da8a67,218,138,103 +copper_penny,"Copper Penny",#ad6f69,173,111,105 +copper_red,"Copper Red",#cb6d51,203,109,81 +copper_rose,"Copper Rose",#966,153,102,102 +coquelicot,Coquelicot,#ff3800,255,56,0 +coral,Coral,#ff7f50,255,127,80 +coral_pink,"Coral Pink",#f88379,248,131,121 +coral_red,"Coral Red",#ff4040,255,64,64 +cordovan,Cordovan,#893f45,137,63,69 +corn,Corn,#fbec5d,251,236,93 +cornell_red,"Cornell Red",#b31b1b,179,27,27 +cornflower_blue,"Cornflower Blue",#6495ed,100,149,237 +cornsilk,Cornsilk,#fff8dc,255,248,220 +cosmic_latte,"Cosmic Latte",#fff8e7,255,248,231 +cotton_candy,"Cotton Candy",#ffbcd9,255,188,217 +cream,Cream,#fffdd0,255,253,208 +crimson,Crimson,#dc143c,220,20,60 +crimson_glory,"Crimson Glory",#be0032,190,0,50 +cyan,Cyan,#0ff,0,255,255 +cyan_process,"Cyan (Process)",#00b7eb,0,183,235 +daffodil,Daffodil,#ffff31,255,255,49 +dandelion,Dandelion,#f0e130,240,225,48 +dark_blue,"Dark Blue",#00008b,0,0,139 +dark_brown,"Dark Brown",#654321,101,67,33 +dark_byzantium,"Dark Byzantium",#5d3954,93,57,84 +dark_candy_apple_red,"Dark Candy Apple Red",#a40000,164,0,0 +dark_cerulean,"Dark Cerulean",#08457e,8,69,126 +dark_chestnut,"Dark Chestnut",#986960,152,105,96 +dark_coral,"Dark Coral",#cd5b45,205,91,69 +dark_cyan,"Dark Cyan",#008b8b,0,139,139 +dark_electric_blue,"Dark Electric Blue",#536878,83,104,120 +dark_goldenrod,"Dark Goldenrod",#b8860b,184,134,11 +dark_gray,"Dark Gray",#a9a9a9,169,169,169 +dark_green,"Dark Green",#013220,1,50,32 +dark_imperial_blue,"Dark Imperial Blue",#00416a,0,65,106 +dark_jungle_green,"Dark Jungle Green",#1a2421,26,36,33 +dark_khaki,"Dark Khaki",#bdb76b,189,183,107 +dark_lava,"Dark Lava",#483c32,72,60,50 +dark_lavender,"Dark Lavender",#734f96,115,79,150 +dark_magenta,"Dark Magenta",#8b008b,139,0,139 +dark_midnight_blue,"Dark Midnight Blue",#036,0,51,102 +dark_olive_green,"Dark Olive Green",#556b2f,85,107,47 +dark_orange,"Dark Orange",#ff8c00,255,140,0 +dark_orchid,"Dark Orchid",#9932cc,153,50,204 +dark_pastel_blue,"Dark Pastel Blue",#779ecb,119,158,203 +dark_pastel_green,"Dark Pastel Green",#03c03c,3,192,60 +dark_pastel_purple,"Dark Pastel Purple",#966fd6,150,111,214 +dark_pastel_red,"Dark Pastel Red",#c23b22,194,59,34 +dark_pink,"Dark Pink",#e75480,231,84,128 +dark_powder_blue,"Dark Powder Blue",#039,0,51,153 +dark_raspberry,"Dark Raspberry",#872657,135,38,87 +dark_red,"Dark Red",#8b0000,139,0,0 +dark_salmon,"Dark Salmon",#e9967a,233,150,122 +dark_scarlet,"Dark Scarlet",#560319,86,3,25 +dark_sea_green,"Dark Sea Green",#8fbc8f,143,188,143 +dark_sienna,"Dark Sienna",#3c1414,60,20,20 +dark_slate_blue,"Dark Slate Blue",#483d8b,72,61,139 +dark_slate_gray,"Dark Slate Gray",#2f4f4f,47,79,79 +dark_spring_green,"Dark Spring Green",#177245,23,114,69 +dark_tan,"Dark Tan",#918151,145,129,81 +dark_tangerine,"Dark Tangerine",#ffa812,255,168,18 +dark_taupe,"Dark Taupe",#483c32,72,60,50 +dark_terra_cotta,"Dark Terra Cotta",#cc4e5c,204,78,92 +dark_turquoise,"Dark Turquoise",#00ced1,0,206,209 +dark_violet,"Dark Violet",#9400d3,148,0,211 +dark_yellow,"Dark Yellow",#9b870c,155,135,12 +dartmouth_green,"Dartmouth Green",#00703c,0,112,60 +davy_s_grey,"Davy'S Grey",#555,85,85,85 +debian_red,"Debian Red",#d70a53,215,10,83 +deep_carmine,"Deep Carmine",#a9203e,169,32,62 +deep_carmine_pink,"Deep Carmine Pink",#ef3038,239,48,56 +deep_carrot_orange,"Deep Carrot Orange",#e9692c,233,105,44 +deep_cerise,"Deep Cerise",#da3287,218,50,135 +deep_champagne,"Deep Champagne",#fad6a5,250,214,165 +deep_chestnut,"Deep Chestnut",#b94e48,185,78,72 +deep_coffee,"Deep Coffee",#704241,112,66,65 +deep_fuchsia,"Deep Fuchsia",#c154c1,193,84,193 +deep_jungle_green,"Deep Jungle Green",#004b49,0,75,73 +deep_lilac,"Deep Lilac",#95b,153,85,187 +deep_magenta,"Deep Magenta",#c0c,204,0,204 +deep_peach,"Deep Peach",#ffcba4,255,203,164 +deep_pink,"Deep Pink",#ff1493,255,20,147 +deep_ruby,"Deep Ruby",#843f5b,132,63,91 +deep_saffron,"Deep Saffron",#f93,255,153,51 +deep_sky_blue,"Deep Sky Blue",#00bfff,0,191,255 +deep_tuscan_red,"Deep Tuscan Red",#66424d,102,66,77 +denim,Denim,#1560bd,21,96,189 +desert,Desert,#c19a6b,193,154,107 +desert_sand,"Desert Sand",#edc9af,237,201,175 +dim_gray,"Dim Gray",#696969,105,105,105 +dodger_blue,"Dodger Blue",#1e90ff,30,144,255 +dogwood_rose,"Dogwood Rose",#d71868,215,24,104 +dollar_bill,"Dollar Bill",#85bb65,133,187,101 +drab,Drab,#967117,150,113,23 +duke_blue,"Duke Blue",#00009c,0,0,156 +earth_yellow,"Earth Yellow",#e1a95f,225,169,95 +ebony,Ebony,#555d50,85,93,80 +ecru,Ecru,#c2b280,194,178,128 +eggplant,Eggplant,#614051,97,64,81 +eggshell,Eggshell,#f0ead6,240,234,214 +egyptian_blue,"Egyptian Blue",#1034a6,16,52,166 +electric_blue,"Electric Blue",#7df9ff,125,249,255 +electric_crimson,"Electric Crimson",#ff003f,255,0,63 +electric_cyan,"Electric Cyan",#0ff,0,255,255 +electric_green,"Electric Green",#0f0,0,255,0 +electric_indigo,"Electric Indigo",#6f00ff,111,0,255 +electric_lavender,"Electric Lavender",#f4bbff,244,187,255 +electric_lime,"Electric Lime",#cf0,204,255,0 +electric_purple,"Electric Purple",#bf00ff,191,0,255 +electric_ultramarine,"Electric Ultramarine",#3f00ff,63,0,255 +electric_violet,"Electric Violet",#8f00ff,143,0,255 +electric_yellow,"Electric Yellow",#ff0,255,255,0 +emerald,Emerald,#50c878,80,200,120 +english_lavender,"English Lavender",#b48395,180,131,149 +eton_blue,"Eton Blue",#96c8a2,150,200,162 +fallow,Fallow,#c19a6b,193,154,107 +falu_red,"Falu Red",#801818,128,24,24 +fandango,Fandango,#b53389,181,51,137 +fashion_fuchsia,"Fashion Fuchsia",#f400a1,244,0,161 +fawn,Fawn,#e5aa70,229,170,112 +feldgrau,Feldgrau,#4d5d53,77,93,83 +fern_green,"Fern Green",#4f7942,79,121,66 +ferrari_red,"Ferrari Red",#ff2800,255,40,0 +field_drab,"Field Drab",#6c541e,108,84,30 +fire_engine_red,"Fire Engine Red",#ce2029,206,32,41 +firebrick,Firebrick,#b22222,178,34,34 +flame,Flame,#e25822,226,88,34 +flamingo_pink,"Flamingo Pink",#fc8eac,252,142,172 +flavescent,Flavescent,#f7e98e,247,233,142 +flax,Flax,#eedc82,238,220,130 +floral_white,"Floral White",#fffaf0,255,250,240 +fluorescent_orange,"Fluorescent Orange",#ffbf00,255,191,0 +fluorescent_pink,"Fluorescent Pink",#ff1493,255,20,147 +fluorescent_yellow,"Fluorescent Yellow",#cf0,204,255,0 +folly,Folly,#ff004f,255,0,79 +forest_green_traditional,"Forest Green (Traditional)",#014421,1,68,33 +forest_green_web,"Forest Green (Web)",#228b22,34,139,34 +french_beige,"French Beige",#a67b5b,166,123,91 +french_blue,"French Blue",#0072bb,0,114,187 +french_lilac,"French Lilac",#86608e,134,96,142 +french_lime,"French Lime",#cf0,204,255,0 +french_raspberry,"French Raspberry",#c72c48,199,44,72 +french_rose,"French Rose",#f64a8a,246,74,138 +fuchsia,Fuchsia,#f0f,255,0,255 +fuchsia_crayola,"Fuchsia (Crayola)",#c154c1,193,84,193 +fuchsia_pink,"Fuchsia Pink",#f7f,255,119,255 +fuchsia_rose,"Fuchsia Rose",#c74375,199,67,117 +fulvous,Fulvous,#e48400,228,132,0 +fuzzy_wuzzy,"Fuzzy Wuzzy",#c66,204,102,102 +gainsboro,Gainsboro,#dcdcdc,220,220,220 +gamboge,Gamboge,#e49b0f,228,155,15 +ghost_white,"Ghost White",#f8f8ff,248,248,255 +ginger,Ginger,#b06500,176,101,0 +glaucous,Glaucous,#6082b6,96,130,182 +glitter,Glitter,#e6e8fa,230,232,250 +gold_metallic,"Gold (Metallic)",#d4af37,212,175,55 +gold_web_golden,"Gold (Web) (Golden)",#ffd700,255,215,0 +golden_brown,"Golden Brown",#996515,153,101,21 +golden_poppy,"Golden Poppy",#fcc200,252,194,0 +golden_yellow,"Golden Yellow",#ffdf00,255,223,0 +goldenrod,Goldenrod,#daa520,218,165,32 +granny_smith_apple,"Granny Smith Apple",#a8e4a0,168,228,160 +gray,Gray,#808080,128,128,128 +gray_asparagus,Gray-Asparagus,#465945,70,89,69 +gray_html_css_gray,"Gray (Html/Css Gray)",#808080,128,128,128 +gray_x11_gray,"Gray (X11 Gray)",#bebebe,190,190,190 +green,"Green (Color Wheel) (X11 Green)",#0f0,0,255,0 +green_crayola,"Green (Crayola)",#1cac78,28,172,120 +green_html_css_green,"Green (Html/Css Green)",#008000,0,128,0 +green_munsell,"Green (Munsell)",#00a877,0,168,119 +green_ncs,"Green (Ncs)",#009f6b,0,159,107 +green_pigment,"Green (Pigment)",#00a550,0,165,80 +green_ryb,"Green (Ryb)",#66b032,102,176,50 +green_yellow,Green-Yellow,#adff2f,173,255,47 +grullo,Grullo,#a99a86,169,154,134 +guppie_green,"Guppie Green",#00ff7f,0,255,127 +halay_be,"Halayà úBe",#663854,102,56,84 +han_blue,"Han Blue",#446ccf,68,108,207 +han_purple,"Han Purple",#5218fa,82,24,250 +hansa_yellow,"Hansa Yellow",#e9d66b,233,214,107 +harlequin,Harlequin,#3fff00,63,255,0 +harvard_crimson,"Harvard Crimson",#c90016,201,0,22 +harvest_gold,"Harvest Gold",#da9100,218,145,0 +heart_gold,"Heart Gold",#808000,128,128,0 +heliotrope,Heliotrope,#df73ff,223,115,255 +hollywood_cerise,"Hollywood Cerise",#f400a1,244,0,161 +honeydew,Honeydew,#f0fff0,240,255,240 +honolulu_blue,"Honolulu Blue",#007fbf,0,127,191 +hooker_s_green,"Hooker'S Green",#49796b,73,121,107 +hot_magenta,"Hot Magenta",#ff1dce,255,29,206 +hot_pink,"Hot Pink",#ff69b4,255,105,180 +hunter_green,"Hunter Green",#355e3b,53,94,59 +iceberg,Iceberg,#71a6d2,113,166,210 +icterine,Icterine,#fcf75e,252,247,94 +imperial_blue,"Imperial Blue",#002395,0,35,149 +inchworm,Inchworm,#b2ec5d,178,236,93 +india_green,"India Green",#138808,19,136,8 +indian_red,"Indian Red",#cd5c5c,205,92,92 +indian_yellow,"Indian Yellow",#e3a857,227,168,87 +indigo,Indigo,#6f00ff,111,0,255 +indigo_dye,"Indigo (Dye)",#00416a,0,65,106 +indigo_web,"Indigo (Web)",#4b0082,75,0,130 +international_klein_blue,"International Klein Blue",#002fa7,0,47,167 +international_orange_aerospace,"International Orange (Aerospace)",#ff4f00,255,79,0 +international_orange_engineering,"International Orange (Engineering)",#ba160c,186,22,12 +international_orange_golden_gate_bridge,"International Orange (Golden Gate Bridge)",#c0362c,192,54,44 +iris,Iris,#5a4fcf,90,79,207 +isabelline,Isabelline,#f4f0ec,244,240,236 +islamic_green,"Islamic Green",#009000,0,144,0 +ivory,Ivory,#fffff0,255,255,240 +jade,Jade,#00a86b,0,168,107 +jasmine,Jasmine,#f8de7e,248,222,126 +jasper,Jasper,#d73b3e,215,59,62 +jazzberry_jam,"Jazzberry Jam",#a50b5e,165,11,94 +jet,Jet,#343434,52,52,52 +jonquil,Jonquil,#fada5e,250,218,94 +june_bud,"June Bud",#bdda57,189,218,87 +jungle_green,"Jungle Green",#29ab87,41,171,135 +kelly_green,"Kelly Green",#4cbb17,76,187,23 +kenyan_copper,"Kenyan Copper",#7c1c05,124,28,5 +khaki_html_css_khaki,"Khaki (Html/Css) (Khaki)",#c3b091,195,176,145 +khaki_x11_light_khaki,"Khaki (X11) (Light Khaki)",#f0e68c,240,230,140 +ku_crimson,"Ku Crimson",#e8000d,232,0,13 +la_salle_green,"La Salle Green",#087830,8,120,48 +languid_lavender,"Languid Lavender",#d6cadd,214,202,221 +lapis_lazuli,"Lapis Lazuli",#26619c,38,97,156 +laser_lemon,"Laser Lemon",#fefe22,254,254,34 +laurel_green,"Laurel Green",#a9ba9d,169,186,157 +lava,Lava,#cf1020,207,16,32 +lavender_blue,"Lavender Blue",#ccf,204,204,255 +lavender_blush,"Lavender Blush",#fff0f5,255,240,245 +lavender_floral,"Lavender (Floral)",#b57edc,181,126,220 +lavender_gray,"Lavender Gray",#c4c3d0,196,195,208 +lavender_indigo,"Lavender Indigo",#9457eb,148,87,235 +lavender_magenta,"Lavender Magenta",#ee82ee,238,130,238 +lavender_mist,"Lavender Mist",#e6e6fa,230,230,250 +lavender_pink,"Lavender Pink",#fbaed2,251,174,210 +lavender_purple,"Lavender Purple",#967bb6,150,123,182 +lavender_rose,"Lavender Rose",#fba0e3,251,160,227 +lavender_web,"Lavender (Web)",#e6e6fa,230,230,250 +lawn_green,"Lawn Green",#7cfc00,124,252,0 +lemon,Lemon,#fff700,255,247,0 +lemon_chiffon,"Lemon Chiffon",#fffacd,255,250,205 +lemon_lime,"Lemon Lime",#e3ff00,227,255,0 +licorice,Licorice,#1a1110,26,17,16 +light_apricot,"Light Apricot",#fdd5b1,253,213,177 +light_blue,"Light Blue",#add8e6,173,216,230 +light_brown,"Light Brown",#b5651d,181,101,29 +light_carmine_pink,"Light Carmine Pink",#e66771,230,103,113 +light_coral,"Light Coral",#f08080,240,128,128 +light_cornflower_blue,"Light Cornflower Blue",#93ccea,147,204,234 +light_crimson,"Light Crimson",#f56991,245,105,145 +light_cyan,"Light Cyan",#e0ffff,224,255,255 +light_fuchsia_pink,"Light Fuchsia Pink",#f984ef,249,132,239 +light_goldenrod_yellow,"Light Goldenrod Yellow",#fafad2,250,250,210 +light_gray,"Light Gray",#d3d3d3,211,211,211 +light_green,"Light Green",#90ee90,144,238,144 +light_khaki,"Light Khaki",#f0e68c,240,230,140 +light_pastel_purple,"Light Pastel Purple",#b19cd9,177,156,217 +light_pink,"Light Pink",#ffb6c1,255,182,193 +light_red_ochre,"Light Red Ochre",#e97451,233,116,81 +light_salmon,"Light Salmon",#ffa07a,255,160,122 +light_salmon_pink,"Light Salmon Pink",#f99,255,153,153 +light_sea_green,"Light Sea Green",#20b2aa,32,178,170 +light_sky_blue,"Light Sky Blue",#87cefa,135,206,250 +light_slate_gray,"Light Slate Gray",#789,119,136,153 +light_taupe,"Light Taupe",#b38b6d,179,139,109 +light_thulian_pink,"Light Thulian Pink",#e68fac,230,143,172 +light_yellow,"Light Yellow",#ffffe0,255,255,224 +lilac,Lilac,#c8a2c8,200,162,200 +lime,"Lime (Color Wheel)",#bfff00,191,255,0 +lime_green,"Lime Green",#32cd32,50,205,50 +lime_web_x11_green,"Lime (Web) (X11 Green)",#0f0,0,255,0 +limerick,Limerick,#9dc209,157,194,9 +lincoln_green,"Lincoln Green",#195905,25,89,5 +linen,Linen,#faf0e6,250,240,230 +lion,Lion,#c19a6b,193,154,107 +little_boy_blue,"Little Boy Blue",#6ca0dc,108,160,220 +liver,Liver,#534b4f,83,75,79 +lust,Lust,#e62020,230,32,32 +magenta,Magenta,#f0f,255,0,255 +magenta_dye,"Magenta (Dye)",#ca1f7b,202,31,123 +magenta_process,"Magenta (Process)",#ff0090,255,0,144 +magic_mint,"Magic Mint",#aaf0d1,170,240,209 +magnolia,Magnolia,#f8f4ff,248,244,255 +mahogany,Mahogany,#c04000,192,64,0 +maize,Maize,#fbec5d,251,236,93 +majorelle_blue,"Majorelle Blue",#6050dc,96,80,220 +malachite,Malachite,#0bda51,11,218,81 +manatee,Manatee,#979aaa,151,154,170 +mango_tango,"Mango Tango",#ff8243,255,130,67 +mantis,Mantis,#74c365,116,195,101 +mardi_gras,"Mardi Gras",#880085,136,0,133 +maroon_crayola,"Maroon (Crayola)",#c32148,195,33,72 +maroon_html_css,"Maroon (Html/Css)",#800000,128,0,0 +maroon_x11,"Maroon (X11)",#b03060,176,48,96 +mauve,Mauve,#e0b0ff,224,176,255 +mauve_taupe,"Mauve Taupe",#915f6d,145,95,109 +mauvelous,Mauvelous,#ef98aa,239,152,170 +maya_blue,"Maya Blue",#73c2fb,115,194,251 +meat_brown,"Meat Brown",#e5b73b,229,183,59 +medium_aquamarine,"Medium Aquamarine",#6da,102,221,170 +medium_blue,"Medium Blue",#0000cd,0,0,205 +medium_candy_apple_red,"Medium Candy Apple Red",#e2062c,226,6,44 +medium_carmine,"Medium Carmine",#af4035,175,64,53 +medium_champagne,"Medium Champagne",#f3e5ab,243,229,171 +medium_electric_blue,"Medium Electric Blue",#035096,3,80,150 +medium_jungle_green,"Medium Jungle Green",#1c352d,28,53,45 +medium_lavender_magenta,"Medium Lavender Magenta",#dda0dd,221,160,221 +medium_orchid,"Medium Orchid",#ba55d3,186,85,211 +medium_persian_blue,"Medium Persian Blue",#0067a5,0,103,165 +medium_purple,"Medium Purple",#9370db,147,112,219 +medium_red_violet,"Medium Red-Violet",#bb3385,187,51,133 +medium_ruby,"Medium Ruby",#aa4069,170,64,105 +medium_sea_green,"Medium Sea Green",#3cb371,60,179,113 +medium_slate_blue,"Medium Slate Blue",#7b68ee,123,104,238 +medium_spring_bud,"Medium Spring Bud",#c9dc87,201,220,135 +medium_spring_green,"Medium Spring Green",#00fa9a,0,250,154 +medium_taupe,"Medium Taupe",#674c47,103,76,71 +medium_turquoise,"Medium Turquoise",#48d1cc,72,209,204 +medium_tuscan_red,"Medium Tuscan Red",#79443b,121,68,59 +medium_vermilion,"Medium Vermilion",#d9603b,217,96,59 +medium_violet_red,"Medium Violet-Red",#c71585,199,21,133 +mellow_apricot,"Mellow Apricot",#f8b878,248,184,120 +mellow_yellow,"Mellow Yellow",#f8de7e,248,222,126 +melon,Melon,#fdbcb4,253,188,180 +midnight_blue,"Midnight Blue",#191970,25,25,112 +midnight_green_eagle_green,"Midnight Green (Eagle Green)",#004953,0,73,83 +mikado_yellow,"Mikado Yellow",#ffc40c,255,196,12 +mint,Mint,#3eb489,62,180,137 +mint_cream,"Mint Cream",#f5fffa,245,255,250 +mint_green,"Mint Green",#98ff98,152,255,152 +misty_rose,"Misty Rose",#ffe4e1,255,228,225 +moccasin,Moccasin,#faebd7,250,235,215 +mode_beige,"Mode Beige",#967117,150,113,23 +moonstone_blue,"Moonstone Blue",#73a9c2,115,169,194 +mordant_red_19,"Mordant Red 19",#ae0c00,174,12,0 +moss_green,"Moss Green",#addfad,173,223,173 +mountain_meadow,"Mountain Meadow",#30ba8f,48,186,143 +mountbatten_pink,"Mountbatten Pink",#997a8d,153,122,141 +msu_green,"Msu Green",#18453b,24,69,59 +mulberry,Mulberry,#c54b8c,197,75,140 +mustard,Mustard,#ffdb58,255,219,88 +myrtle,Myrtle,#21421e,33,66,30 +nadeshiko_pink,"Nadeshiko Pink",#f6adc6,246,173,198 +napier_green,"Napier Green",#2a8000,42,128,0 +naples_yellow,"Naples Yellow",#fada5e,250,218,94 +navajo_white,"Navajo White",#ffdead,255,222,173 +navy_blue,"Navy Blue",#000080,0,0,128 +neon_carrot,"Neon Carrot",#ffa343,255,163,67 +neon_fuchsia,"Neon Fuchsia",#fe4164,254,65,100 +neon_green,"Neon Green",#39ff14,57,255,20 +new_york_pink,"New York Pink",#d7837f,215,131,127 +non_photo_blue,"Non-Photo Blue",#a4dded,164,221,237 +north_texas_green,"North Texas Green",#059033,5,144,51 +ocean_boat_blue,"Ocean Boat Blue",#0077be,0,119,190 +ochre,Ochre,#c72,204,119,34 +office_green,"Office Green",#008000,0,128,0 +old_gold,"Old Gold",#cfb53b,207,181,59 +old_lace,"Old Lace",#fdf5e6,253,245,230 +old_lavender,"Old Lavender",#796878,121,104,120 +old_mauve,"Old Mauve",#673147,103,49,71 +old_rose,"Old Rose",#c08081,192,128,129 +olive,Olive,#808000,128,128,0 +olive_drab_7,"Olive Drab #7",#3c341f,60,52,31 +olive_drab_web_olive_drab_3,"Olive Drab (Web) (Olive Drab #3)",#6b8e23,107,142,35 +olivine,Olivine,#9ab973,154,185,115 +onyx,Onyx,#353839,53,56,57 +opera_mauve,"Opera Mauve",#b784a7,183,132,167 +orange,"Orange (Color Wheel)",#ff7f00,255,127,0 +orange_peel,"Orange Peel",#ff9f00,255,159,0 +orange_red,Orange-Red,#ff4500,255,69,0 +orange_ryb,"Orange (Ryb)",#fb9902,251,153,2 +orange_web_color,"Orange (Web Color)",#ffa500,255,165,0 +orchid,Orchid,#da70d6,218,112,214 +otter_brown,"Otter Brown",#654321,101,67,33 +ou_crimson_red,"Ou Crimson Red",#900,153,0,0 +outer_space,"Outer Space",#414a4c,65,74,76 +outrageous_orange,"Outrageous Orange",#ff6e4a,255,110,74 +oxford_blue,"Oxford Blue",#002147,0,33,71 +pakistan_green,"Pakistan Green",#060,0,102,0 +palatinate_blue,"Palatinate Blue",#273be2,39,59,226 +palatinate_purple,"Palatinate Purple",#682860,104,40,96 +pale_aqua,"Pale Aqua",#bcd4e6,188,212,230 +pale_blue,"Pale Blue",#afeeee,175,238,238 +pale_brown,"Pale Brown",#987654,152,118,84 +pale_carmine,"Pale Carmine",#af4035,175,64,53 +pale_cerulean,"Pale Cerulean",#9bc4e2,155,196,226 +pale_chestnut,"Pale Chestnut",#ddadaf,221,173,175 +pale_copper,"Pale Copper",#da8a67,218,138,103 +pale_cornflower_blue,"Pale Cornflower Blue",#abcdef,171,205,239 +pale_gold,"Pale Gold",#e6be8a,230,190,138 +pale_goldenrod,"Pale Goldenrod",#eee8aa,238,232,170 +pale_green,"Pale Green",#98fb98,152,251,152 +pale_lavender,"Pale Lavender",#dcd0ff,220,208,255 +pale_magenta,"Pale Magenta",#f984e5,249,132,229 +pale_pink,"Pale Pink",#fadadd,250,218,221 +pale_plum,"Pale Plum",#dda0dd,221,160,221 +pale_red_violet,"Pale Red-Violet",#db7093,219,112,147 +pale_robin_egg_blue,"Pale Robin Egg Blue",#96ded1,150,222,209 +pale_silver,"Pale Silver",#c9c0bb,201,192,187 +pale_spring_bud,"Pale Spring Bud",#ecebbd,236,235,189 +pale_taupe,"Pale Taupe",#bc987e,188,152,126 +pale_violet_red,"Pale Violet-Red",#db7093,219,112,147 +pansy_purple,"Pansy Purple",#78184a,120,24,74 +papaya_whip,"Papaya Whip",#ffefd5,255,239,213 +paris_green,"Paris Green",#50c878,80,200,120 +pastel_blue,"Pastel Blue",#aec6cf,174,198,207 +pastel_brown,"Pastel Brown",#836953,131,105,83 +pastel_gray,"Pastel Gray",#cfcfc4,207,207,196 +pastel_green,"Pastel Green",#7d7,119,221,119 +pastel_magenta,"Pastel Magenta",#f49ac2,244,154,194 +pastel_orange,"Pastel Orange",#ffb347,255,179,71 +pastel_pink,"Pastel Pink",#dea5a4,222,165,164 +pastel_purple,"Pastel Purple",#b39eb5,179,158,181 +pastel_red,"Pastel Red",#ff6961,255,105,97 +pastel_violet,"Pastel Violet",#cb99c9,203,153,201 +pastel_yellow,"Pastel Yellow",#fdfd96,253,253,150 +patriarch,Patriarch,#800080,128,0,128 +payne_s_grey,"Payne'S Grey",#536878,83,104,120 +peach,Peach,#ffe5b4,255,229,180 +peach_crayola,"Peach (Crayola)",#ffcba4,255,203,164 +peach_orange,Peach-Orange,#fc9,255,204,153 +peach_puff,"Peach Puff",#ffdab9,255,218,185 +peach_yellow,Peach-Yellow,#fadfad,250,223,173 +pear,Pear,#d1e231,209,226,49 +pearl,Pearl,#eae0c8,234,224,200 +pearl_aqua,"Pearl Aqua",#88d8c0,136,216,192 +pearly_purple,"Pearly Purple",#b768a2,183,104,162 +peridot,Peridot,#e6e200,230,226,0 +periwinkle,Periwinkle,#ccf,204,204,255 +persian_blue,"Persian Blue",#1c39bb,28,57,187 +persian_green,"Persian Green",#00a693,0,166,147 +persian_indigo,"Persian Indigo",#32127a,50,18,122 +persian_orange,"Persian Orange",#d99058,217,144,88 +persian_pink,"Persian Pink",#f77fbe,247,127,190 +persian_plum,"Persian Plum",#701c1c,112,28,28 +persian_red,"Persian Red",#c33,204,51,51 +persian_rose,"Persian Rose",#fe28a2,254,40,162 +persimmon,Persimmon,#ec5800,236,88,0 +peru,Peru,#cd853f,205,133,63 +phlox,Phlox,#df00ff,223,0,255 +phthalo_blue,"Phthalo Blue",#000f89,0,15,137 +phthalo_green,"Phthalo Green",#123524,18,53,36 +piggy_pink,"Piggy Pink",#fddde6,253,221,230 +pine_green,"Pine Green",#01796f,1,121,111 +pink,Pink,#ffc0cb,255,192,203 +pink_lace,"Pink Lace",#ffddf4,255,221,244 +pink_orange,Pink-Orange,#f96,255,153,102 +pink_pearl,"Pink Pearl",#e7accf,231,172,207 +pink_sherbet,"Pink Sherbet",#f78fa7,247,143,167 +pistachio,Pistachio,#93c572,147,197,114 +platinum,Platinum,#e5e4e2,229,228,226 +plum_traditional,"Plum (Traditional)",#8e4585,142,69,133 +plum_web,"Plum (Web)",#dda0dd,221,160,221 +portland_orange,"Portland Orange",#ff5a36,255,90,54 +powder_blue_web,"Powder Blue (Web)",#b0e0e6,176,224,230 +princeton_orange,"Princeton Orange",#ff8f00,255,143,0 +prune,Prune,#701c1c,112,28,28 +prussian_blue,"Prussian Blue",#003153,0,49,83 +psychedelic_purple,"Psychedelic Purple",#df00ff,223,0,255 +puce,Puce,#c89,204,136,153 +pumpkin,Pumpkin,#ff7518,255,117,24 +purple_heart,"Purple Heart",#69359c,105,53,156 +purple_html_css,"Purple (Html/Css)",#800080,128,0,128 +purple_mountain_majesty,"Purple Mountain Majesty",#9678b6,150,120,182 +purple_munsell,"Purple (Munsell)",#9f00c5,159,0,197 +purple_pizzazz,"Purple Pizzazz",#fe4eda,254,78,218 +purple_taupe,"Purple Taupe",#50404d,80,64,77 +purple_x11,"Purple (X11)",#a020f0,160,32,240 +quartz,Quartz,#51484f,81,72,79 +rackley,Rackley,#5d8aa8,93,138,168 +radical_red,"Radical Red",#ff355e,255,53,94 +rajah,Rajah,#fbab60,251,171,96 +raspberry,Raspberry,#e30b5d,227,11,93 +raspberry_glace,"Raspberry Glace",#915f6d,145,95,109 +raspberry_pink,"Raspberry Pink",#e25098,226,80,152 +raspberry_rose,"Raspberry Rose",#b3446c,179,68,108 +raw_umber,"Raw Umber",#826644,130,102,68 +razzle_dazzle_rose,"Razzle Dazzle Rose",#f3c,255,51,204 +razzmatazz,Razzmatazz,#e3256b,227,37,107 +red,Red,#f00,255,0,0 +red_brown,Red-Brown,#a52a2a,165,42,42 +red_devil,"Red Devil",#860111,134,1,17 +red_munsell,"Red (Munsell)",#f2003c,242,0,60 +red_ncs,"Red (Ncs)",#c40233,196,2,51 +red_orange,Red-Orange,#ff5349,255,83,73 +red_pigment,"Red (Pigment)",#ed1c24,237,28,36 +red_ryb,"Red (Ryb)",#fe2712,254,39,18 +red_violet,Red-Violet,#c71585,199,21,133 +redwood,Redwood,#ab4e52,171,78,82 +regalia,Regalia,#522d80,82,45,128 +resolution_blue,"Resolution Blue",#002387,0,35,135 +rich_black,"Rich Black",#004040,0,64,64 +rich_brilliant_lavender,"Rich Brilliant Lavender",#f1a7fe,241,167,254 +rich_carmine,"Rich Carmine",#d70040,215,0,64 +rich_electric_blue,"Rich Electric Blue",#0892d0,8,146,208 +rich_lavender,"Rich Lavender",#a76bcf,167,107,207 +rich_lilac,"Rich Lilac",#b666d2,182,102,210 +rich_maroon,"Rich Maroon",#b03060,176,48,96 +rifle_green,"Rifle Green",#414833,65,72,51 +robin_egg_blue,"Robin Egg Blue",#0cc,0,204,204 +rose,Rose,#ff007f,255,0,127 +rose_bonbon,"Rose Bonbon",#f9429e,249,66,158 +rose_ebony,"Rose Ebony",#674846,103,72,70 +rose_gold,"Rose Gold",#b76e79,183,110,121 +rose_madder,"Rose Madder",#e32636,227,38,54 +rose_pink,"Rose Pink",#f6c,255,102,204 +rose_quartz,"Rose Quartz",#aa98a9,170,152,169 +rose_taupe,"Rose Taupe",#905d5d,144,93,93 +rose_vale,"Rose Vale",#ab4e52,171,78,82 +rosewood,Rosewood,#65000b,101,0,11 +rosso_corsa,"Rosso Corsa",#d40000,212,0,0 +rosy_brown,"Rosy Brown",#bc8f8f,188,143,143 +royal_azure,"Royal Azure",#0038a8,0,56,168 +royal_blue_traditional,"Royal Blue (Traditional)",#002366,0,35,102 +royal_blue_web,"Royal Blue (Web)",#4169e1,65,105,225 +royal_fuchsia,"Royal Fuchsia",#ca2c92,202,44,146 +royal_purple,"Royal Purple",#7851a9,120,81,169 +royal_yellow,"Royal Yellow",#fada5e,250,218,94 +rubine_red,"Rubine Red",#d10056,209,0,86 +ruby,Ruby,#e0115f,224,17,95 +ruby_red,"Ruby Red",#9b111e,155,17,30 +ruddy,Ruddy,#ff0028,255,0,40 +ruddy_brown,"Ruddy Brown",#bb6528,187,101,40 +ruddy_pink,"Ruddy Pink",#e18e96,225,142,150 +rufous,Rufous,#a81c07,168,28,7 +russet,Russet,#80461b,128,70,27 +rust,Rust,#b7410e,183,65,14 +rusty_red,"Rusty Red",#da2c43,218,44,67 +sacramento_state_green,"Sacramento State Green",#00563f,0,86,63 +saddle_brown,"Saddle Brown",#8b4513,139,69,19 +safety_orange_blaze_orange,"Safety Orange (Blaze Orange)",#ff6700,255,103,0 +saffron,Saffron,#f4c430,244,196,48 +salmon,Salmon,#ff8c69,255,140,105 +salmon_pink,"Salmon Pink",#ff91a4,255,145,164 +sand,Sand,#c2b280,194,178,128 +sand_dune,"Sand Dune",#967117,150,113,23 +sandstorm,Sandstorm,#ecd540,236,213,64 +sandy_brown,"Sandy Brown",#f4a460,244,164,96 +sandy_taupe,"Sandy Taupe",#967117,150,113,23 +sangria,Sangria,#92000a,146,0,10 +sap_green,"Sap Green",#507d2a,80,125,42 +sapphire,Sapphire,#0f52ba,15,82,186 +sapphire_blue,"Sapphire Blue",#0067a5,0,103,165 +satin_sheen_gold,"Satin Sheen Gold",#cba135,203,161,53 +scarlet,Scarlet,#ff2400,255,36,0 +scarlet_crayola,"Scarlet (Crayola)",#fd0e35,253,14,53 +school_bus_yellow,"School Bus Yellow",#ffd800,255,216,0 +screamin_green,"Screamin' Green",#76ff7a,118,255,122 +sea_blue,"Sea Blue",#006994,0,105,148 +sea_green,"Sea Green",#2e8b57,46,139,87 +seal_brown,"Seal Brown",#321414,50,20,20 +seashell,Seashell,#fff5ee,255,245,238 +selective_yellow,"Selective Yellow",#ffba00,255,186,0 +sepia,Sepia,#704214,112,66,20 +shadow,Shadow,#8a795d,138,121,93 +shamrock_green,"Shamrock Green",#009e60,0,158,96 +shocking_pink,"Shocking Pink",#fc0fc0,252,15,192 +shocking_pink_crayola,"Shocking Pink (Crayola)",#ff6fff,255,111,255 +sienna,Sienna,#882d17,136,45,23 +silver,Silver,#c0c0c0,192,192,192 +sinopia,Sinopia,#cb410b,203,65,11 +skobeloff,Skobeloff,#007474,0,116,116 +sky_blue,"Sky Blue",#87ceeb,135,206,235 +sky_magenta,"Sky Magenta",#cf71af,207,113,175 +slate_blue,"Slate Blue",#6a5acd,106,90,205 +slate_gray,"Slate Gray",#708090,112,128,144 +smalt_dark_powder_blue,"Smalt (Dark Powder Blue)",#039,0,51,153 +smokey_topaz,"Smokey Topaz",#933d41,147,61,65 +smoky_black,"Smoky Black",#100c08,16,12,8 +snow,Snow,#fffafa,255,250,250 +spiro_disco_ball,"Spiro Disco Ball",#0fc0fc,15,192,252 +spring_bud,"Spring Bud",#a7fc00,167,252,0 +spring_green,"Spring Green",#00ff7f,0,255,127 +st_patrick_s_blue,"St. Patrick'S Blue",#23297a,35,41,122 +steel_blue,"Steel Blue",#4682b4,70,130,180 +stil_de_grain_yellow,"Stil De Grain Yellow",#fada5e,250,218,94 +stizza,Stizza,#900,153,0,0 +stormcloud,Stormcloud,#4f666a,79,102,106 +straw,Straw,#e4d96f,228,217,111 +sunglow,Sunglow,#fc3,255,204,51 +sunset,Sunset,#fad6a5,250,214,165 +tan,Tan,#d2b48c,210,180,140 +tangelo,Tangelo,#f94d00,249,77,0 +tangerine,Tangerine,#f28500,242,133,0 +tangerine_yellow,"Tangerine Yellow",#fc0,255,204,0 +tango_pink,"Tango Pink",#e4717a,228,113,122 +taupe,Taupe,#483c32,72,60,50 +taupe_gray,"Taupe Gray",#8b8589,139,133,137 +tea_green,"Tea Green",#d0f0c0,208,240,192 +tea_rose_orange,"Tea Rose (Orange)",#f88379,248,131,121 +tea_rose_rose,"Tea Rose (Rose)",#f4c2c2,244,194,194 +teal,Teal,#008080,0,128,128 +teal_blue,"Teal Blue",#367588,54,117,136 +teal_green,"Teal Green",#00827f,0,130,127 +telemagenta,Telemagenta,#cf3476,207,52,118 +tenn_tawny,"Tenné (Tawny)",#cd5700,205,87,0 +terra_cotta,"Terra Cotta",#e2725b,226,114,91 +thistle,Thistle,#d8bfd8,216,191,216 +thulian_pink,"Thulian Pink",#de6fa1,222,111,161 +tickle_me_pink,"Tickle Me Pink",#fc89ac,252,137,172 +tiffany_blue,"Tiffany Blue",#0abab5,10,186,181 +tiger_s_eye,"Tiger'S Eye",#e08d3c,224,141,60 +timberwolf,Timberwolf,#dbd7d2,219,215,210 +titanium_yellow,"Titanium Yellow",#eee600,238,230,0 +tomato,Tomato,#ff6347,255,99,71 +toolbox,Toolbox,#746cc0,116,108,192 +topaz,Topaz,#ffc87c,255,200,124 +tractor_red,"Tractor Red",#fd0e35,253,14,53 +trolley_grey,"Trolley Grey",#808080,128,128,128 +tropical_rain_forest,"Tropical Rain Forest",#00755e,0,117,94 +true_blue,"True Blue",#0073cf,0,115,207 +tufts_blue,"Tufts Blue",#417dc1,65,125,193 +tumbleweed,Tumbleweed,#deaa88,222,170,136 +turkish_rose,"Turkish Rose",#b57281,181,114,129 +turquoise,Turquoise,#30d5c8,48,213,200 +turquoise_blue,"Turquoise Blue",#00ffef,0,255,239 +turquoise_green,"Turquoise Green",#a0d6b4,160,214,180 +tuscan_red,"Tuscan Red",#7c4848,124,72,72 +twilight_lavender,"Twilight Lavender",#8a496b,138,73,107 +tyrian_purple,"Tyrian Purple",#66023c,102,2,60 +ua_blue,"Ua Blue",#03a,0,51,170 +ua_red,"Ua Red",#d9004c,217,0,76 +ube,Ube,#8878c3,136,120,195 +ucla_blue,"Ucla Blue",#536895,83,104,149 +ucla_gold,"Ucla Gold",#ffb300,255,179,0 +ufo_green,"Ufo Green",#3cd070,60,208,112 +ultra_pink,"Ultra Pink",#ff6fff,255,111,255 +ultramarine,Ultramarine,#120a8f,18,10,143 +ultramarine_blue,"Ultramarine Blue",#4166f5,65,102,245 +umber,Umber,#635147,99,81,71 +unbleached_silk,"Unbleached Silk",#ffddca,255,221,202 +united_nations_blue,"United Nations Blue",#5b92e5,91,146,229 +university_of_california_gold,"University Of California Gold",#b78727,183,135,39 +unmellow_yellow,"Unmellow Yellow",#ff6,255,255,102 +up_forest_green,"Up Forest Green",#014421,1,68,33 +up_maroon,"Up Maroon",#7b1113,123,17,19 +upsdell_red,"Upsdell Red",#ae2029,174,32,41 +urobilin,Urobilin,#e1ad21,225,173,33 +usafa_blue,"Usafa Blue",#004f98,0,79,152 +usc_cardinal,"Usc Cardinal",#900,153,0,0 +usc_gold,"Usc Gold",#fc0,255,204,0 +utah_crimson,"Utah Crimson",#d3003f,211,0,63 +vanilla,Vanilla,#f3e5ab,243,229,171 +vegas_gold,"Vegas Gold",#c5b358,197,179,88 +venetian_red,"Venetian Red",#c80815,200,8,21 +verdigris,Verdigris,#43b3ae,67,179,174 +vermilion_cinnabar,"Vermilion (Cinnabar)",#e34234,227,66,52 +vermilion_plochere,"Vermilion (Plochere)",#d9603b,217,96,59 +veronica,Veronica,#a020f0,160,32,240 +violet,Violet,#8f00ff,143,0,255 +violet_blue,Violet-Blue,#324ab2,50,74,178 +violet_color_wheel,"Violet (Color Wheel)",#7f00ff,127,0,255 +violet_ryb,"Violet (Ryb)",#8601af,134,1,175 +violet_web,"Violet (Web)",#ee82ee,238,130,238 +viridian,Viridian,#40826d,64,130,109 +vivid_auburn,"Vivid Auburn",#922724,146,39,36 +vivid_burgundy,"Vivid Burgundy",#9f1d35,159,29,53 +vivid_cerise,"Vivid Cerise",#da1d81,218,29,129 +vivid_tangerine,"Vivid Tangerine",#ffa089,255,160,137 +vivid_violet,"Vivid Violet",#9f00ff,159,0,255 +warm_black,"Warm Black",#004242,0,66,66 +waterspout,Waterspout,#a4f4f9,164,244,249 +wenge,Wenge,#645452,100,84,82 +wheat,Wheat,#f5deb3,245,222,179 +white,White,#fff,255,255,255 +white_smoke,"White Smoke",#f5f5f5,245,245,245 +wild_blue_yonder,"Wild Blue Yonder",#a2add0,162,173,208 +wild_strawberry,"Wild Strawberry",#ff43a4,255,67,164 +wild_watermelon,"Wild Watermelon",#fc6c85,252,108,133 +wine,Wine,#722f37,114,47,55 +wine_dregs,"Wine Dregs",#673147,103,49,71 +wisteria,Wisteria,#c9a0dc,201,160,220 +wood_brown,"Wood Brown",#c19a6b,193,154,107 +xanadu,Xanadu,#738678,115,134,120 +yale_blue,"Yale Blue",#0f4d92,15,77,146 +yellow,Yellow,#ff0,255,255,0 +yellow_green,Yellow-Green,#9acd32,154,205,50 +yellow_munsell,"Yellow (Munsell)",#efcc00,239,204,0 +yellow_ncs,"Yellow (Ncs)",#ffd300,255,211,0 +yellow_orange,"Yellow Orange",#ffae42,255,174,66 +yellow_process,"Yellow (Process)",#ffef00,255,239,0 +yellow_ryb,"Yellow (Ryb)",#fefe33,254,254,51 +zaffre,Zaffre,#0014a8,0,20,168 +zinnwaldite_brown,"Zinnwaldite Brown",#2c1608,44,22,8 diff --git a/skimage/novice/colors.py b/skimage/novice/colors.py new file mode 100644 index 00000000..6ff98a85 --- /dev/null +++ b/skimage/novice/colors.py @@ -0,0 +1,865 @@ +AIR_FORCE_BLUE_RAF = (93, 138, 168) +AIR_FORCE_BLUE_USAF = (0, 48, 143) +AIR_SUPERIORITY_BLUE = (114, 160, 193) +ALABAMA_CRIMSON = (163, 38, 56) +ALICE_BLUE = (240, 248, 255) +ALIZARIN_CRIMSON = (227, 38, 54) +ALLOY_ORANGE = (196, 98, 16) +ALMOND = (239, 222, 205) +AMARANTH = (229, 43, 80) +AMBER = (255, 191, 0) +AMBER_SAE_ECE = (255, 126, 0) +AMERICAN_ROSE = (255, 3, 62) +AMETHYST = (153, 102, 204) +ANDROID_GREEN = (164, 198, 57) +ANTI_FLASH_WHITE = (242, 243, 244) +ANTIQUE_BRASS = (205, 149, 117) +ANTIQUE_FUCHSIA = (145, 92, 131) +ANTIQUE_RUBY = (132, 27, 45) +ANTIQUE_WHITE = (250, 235, 215) +AO_ENGLISH = (0, 128, 0) +APPLE_GREEN = (141, 182, 0) +APRICOT = (251, 206, 177) +AQUA = (0, 255, 255) +AQUAMARINE = (127, 255, 212) +ARMY_GREEN = (75, 83, 32) +ARSENIC = (59, 68, 75) +ARYLIDE_YELLOW = (233, 214, 107) +ASH_GREY = (178, 190, 181) +ASPARAGUS = (135, 169, 107) +ATOMIC_TANGERINE = (255, 153, 102) +AUBURN = (165, 42, 42) +AUREOLIN = (253, 238, 0) +AUROMETALSAURUS = (110, 127, 128) +AVOCADO = (86, 130, 3) +AZURE = (0, 127, 255) +AZURE_MIST_WEB = (240, 255, 255) +BABY_BLUE = (137, 207, 240) +BABY_BLUE_EYES = (161, 202, 241) +BABY_PINK = (244, 194, 194) +BALL_BLUE = (33, 171, 205) +BANANA_MANIA = (250, 231, 181) +BANANA_YELLOW = (255, 225, 53) +BARN_RED = (124, 10, 2) +BATTLESHIP_GREY = (132, 132, 130) +BAZAAR = (152, 119, 123) +BEAU_BLUE = (188, 212, 230) +BEAVER = (159, 129, 112) +BEIGE = (245, 245, 220) +BIG_DIP_O_RUBY = (156, 37, 66) +BISQUE = (255, 228, 196) +BISTRE = (61, 43, 31) +BITTERSWEET = (254, 111, 94) +BITTERSWEET_SHIMMER = (191, 79, 81) +BLACK = (0, 0, 0) +BLACK_BEAN = (61, 12, 2) +BLACK_LEATHER_JACKET = (37, 53, 41) +BLACK_OLIVE = (59, 60, 54) +BLANCHED_ALMOND = (255, 235, 205) +BLAST_OFF_BRONZE = (165, 113, 100) +BLEU_DE_FRANCE = (49, 140, 231) +BLIZZARD_BLUE = (172, 229, 238) +BLOND = (250, 240, 190) +BLUE = (0, 0, 255) +BLUE_BELL = (162, 162, 208) +BLUE_CRAYOLA = (31, 117, 254) +BLUE_GRAY = (102, 153, 204) +BLUE_GREEN = (13, 152, 186) +BLUE_MUNSELL = (0, 147, 175) +BLUE_NCS = (0, 135, 189) +BLUE_PIGMENT = (51, 51, 153) +BLUE_RYB = (2, 71, 254) +BLUE_SAPPHIRE = (18, 97, 128) +BLUE_VIOLET = (138, 43, 226) +BLUSH = (222, 93, 131) +BOLE = (121, 68, 59) +BONDI_BLUE = (0, 149, 182) +BONE = (227, 218, 201) +BOSTON_UNIVERSITY_RED = (204, 0, 0) +BOTTLE_GREEN = (0, 106, 78) +BOYSENBERRY = (135, 50, 96) +BRANDEIS_BLUE = (0, 112, 255) +BRASS = (181, 166, 66) +BRICK_RED = (203, 65, 84) +BRIGHT_CERULEAN = (29, 172, 214) +BRIGHT_GREEN = (102, 255, 0) +BRIGHT_LAVENDER = (191, 148, 228) +BRIGHT_MAROON = (195, 33, 72) +BRIGHT_PINK = (255, 0, 127) +BRIGHT_TURQUOISE = (8, 232, 222) +BRIGHT_UBE = (209, 159, 232) +BRILLIANT_LAVENDER = (244, 187, 255) +BRILLIANT_ROSE = (255, 85, 163) +BRINK_PINK = (251, 96, 127) +BRITISH_RACING_GREEN = (0, 66, 37) +BRONZE = (205, 127, 50) +BROWN_TRADITIONAL = (150, 75, 0) +BROWN_WEB = (165, 42, 42) +BUBBLE_GUM = (255, 193, 204) +BUBBLES = (231, 254, 255) +BUFF = (240, 220, 130) +BULGARIAN_ROSE = (72, 6, 7) +BURGUNDY = (128, 0, 32) +BURLYWOOD = (222, 184, 135) +BURNT_ORANGE = (204, 85, 0) +BURNT_SIENNA = (233, 116, 81) +BURNT_UMBER = (138, 51, 36) +BYZANTINE = (189, 51, 164) +BYZANTIUM = (112, 41, 99) +CADET = (83, 104, 114) +CADET_BLUE = (95, 158, 160) +CADET_GREY = (145, 163, 176) +CADMIUM_GREEN = (0, 107, 60) +CADMIUM_ORANGE = (237, 135, 45) +CADMIUM_RED = (227, 0, 34) +CADMIUM_YELLOW = (255, 246, 0) +CAF_AU_LAIT = (166, 123, 91) +CAF_NOIR = (75, 54, 33) +CAL_POLY_GREEN = (30, 77, 43) +CAMBRIDGE_BLUE = (163, 193, 173) +CAMEL = (193, 154, 107) +CAMEO_PINK = (239, 187, 204) +CAMOUFLAGE_GREEN = (120, 134, 107) +CANARY_YELLOW = (255, 239, 0) +CANDY_APPLE_RED = (255, 8, 0) +CANDY_PINK = (228, 113, 122) +CAPRI = (0, 191, 255) +CAPUT_MORTUUM = (89, 39, 32) +CARDINAL = (196, 30, 58) +CARIBBEAN_GREEN = (0, 204, 153) +CARMINE = (150, 0, 24) +CARMINE_M_P = (215, 0, 64) +CARMINE_PINK = (235, 76, 66) +CARMINE_RED = (255, 0, 56) +CARNATION_PINK = (255, 166, 201) +CARNELIAN = (179, 27, 27) +CAROLINA_BLUE = (153, 186, 221) +CARROT_ORANGE = (237, 145, 33) +CATALINA_BLUE = (6, 42, 120) +CEIL = (146, 161, 207) +CELADON = (172, 225, 175) +CELADON_BLUE = (0, 123, 167) +CELADON_GREEN = (47, 132, 124) +CELESTE_COLOUR = (178, 255, 255) +CELESTIAL_BLUE = (73, 151, 208) +CERISE = (222, 49, 99) +CERISE_PINK = (236, 59, 131) +CERULEAN = (0, 123, 167) +CERULEAN_BLUE = (42, 82, 190) +CERULEAN_FROST = (109, 155, 195) +CG_BLUE = (0, 122, 165) +CG_RED = (224, 60, 49) +CHAMOISEE = (160, 120, 90) +CHAMPAGNE = (250, 214, 165) +CHARCOAL = (54, 69, 79) +CHARM_PINK = (230, 143, 172) +CHARTREUSE_TRADITIONAL = (223, 255, 0) +CHARTREUSE_WEB = (127, 255, 0) +CHERRY = (222, 49, 99) +CHERRY_BLOSSOM_PINK = (255, 183, 197) +CHESTNUT = (205, 92, 92) +CHINA_PINK = (222, 111, 161) +CHINA_ROSE = (168, 81, 110) +CHINESE_RED = (170, 56, 30) +CHOCOLATE_TRADITIONAL = (123, 63, 0) +CHOCOLATE_WEB = (210, 105, 30) +CHROME_YELLOW = (255, 167, 0) +CINEREOUS = (152, 129, 123) +CINNABAR = (227, 66, 52) +CINNAMON = (210, 105, 30) +CITRINE = (228, 208, 10) +CLASSIC_ROSE = (251, 204, 231) +COBALT = (0, 71, 171) +COCOA_BROWN = (210, 105, 30) +COFFEE = (111, 78, 55) +COLUMBIA_BLUE = (155, 221, 255) +CONGO_PINK = (248, 131, 121) +COOL_BLACK = (0, 46, 99) +COOL_GREY = (140, 146, 172) +COPPER = (184, 115, 51) +COPPER_CRAYOLA = (218, 138, 103) +COPPER_PENNY = (173, 111, 105) +COPPER_RED = (203, 109, 81) +COPPER_ROSE = (153, 102, 102) +COQUELICOT = (255, 56, 0) +CORAL = (255, 127, 80) +CORAL_PINK = (248, 131, 121) +CORAL_RED = (255, 64, 64) +CORDOVAN = (137, 63, 69) +CORN = (251, 236, 93) +CORNELL_RED = (179, 27, 27) +CORNFLOWER_BLUE = (100, 149, 237) +CORNSILK = (255, 248, 220) +COSMIC_LATTE = (255, 248, 231) +COTTON_CANDY = (255, 188, 217) +CREAM = (255, 253, 208) +CRIMSON = (220, 20, 60) +CRIMSON_GLORY = (190, 0, 50) +CYAN = (0, 255, 255) +CYAN_PROCESS = (0, 183, 235) +DAFFODIL = (255, 255, 49) +DANDELION = (240, 225, 48) +DARK_BLUE = (0, 0, 139) +DARK_BROWN = (101, 67, 33) +DARK_BYZANTIUM = (93, 57, 84) +DARK_CANDY_APPLE_RED = (164, 0, 0) +DARK_CERULEAN = (8, 69, 126) +DARK_CHESTNUT = (152, 105, 96) +DARK_CORAL = (205, 91, 69) +DARK_CYAN = (0, 139, 139) +DARK_ELECTRIC_BLUE = (83, 104, 120) +DARK_GOLDENROD = (184, 134, 11) +DARK_GRAY = (169, 169, 169) +DARK_GREEN = (1, 50, 32) +DARK_IMPERIAL_BLUE = (0, 65, 106) +DARK_JUNGLE_GREEN = (26, 36, 33) +DARK_KHAKI = (189, 183, 107) +DARK_LAVA = (72, 60, 50) +DARK_LAVENDER = (115, 79, 150) +DARK_MAGENTA = (139, 0, 139) +DARK_MIDNIGHT_BLUE = (0, 51, 102) +DARK_OLIVE_GREEN = (85, 107, 47) +DARK_ORANGE = (255, 140, 0) +DARK_ORCHID = (153, 50, 204) +DARK_PASTEL_BLUE = (119, 158, 203) +DARK_PASTEL_GREEN = (3, 192, 60) +DARK_PASTEL_PURPLE = (150, 111, 214) +DARK_PASTEL_RED = (194, 59, 34) +DARK_PINK = (231, 84, 128) +DARK_POWDER_BLUE = (0, 51, 153) +DARK_RASPBERRY = (135, 38, 87) +DARK_RED = (139, 0, 0) +DARK_SALMON = (233, 150, 122) +DARK_SCARLET = (86, 3, 25) +DARK_SEA_GREEN = (143, 188, 143) +DARK_SIENNA = (60, 20, 20) +DARK_SLATE_BLUE = (72, 61, 139) +DARK_SLATE_GRAY = (47, 79, 79) +DARK_SPRING_GREEN = (23, 114, 69) +DARK_TAN = (145, 129, 81) +DARK_TANGERINE = (255, 168, 18) +DARK_TAUPE = (72, 60, 50) +DARK_TERRA_COTTA = (204, 78, 92) +DARK_TURQUOISE = (0, 206, 209) +DARK_VIOLET = (148, 0, 211) +DARK_YELLOW = (155, 135, 12) +DARTMOUTH_GREEN = (0, 112, 60) +DAVY_S_GREY = (85, 85, 85) +DEBIAN_RED = (215, 10, 83) +DEEP_CARMINE = (169, 32, 62) +DEEP_CARMINE_PINK = (239, 48, 56) +DEEP_CARROT_ORANGE = (233, 105, 44) +DEEP_CERISE = (218, 50, 135) +DEEP_CHAMPAGNE = (250, 214, 165) +DEEP_CHESTNUT = (185, 78, 72) +DEEP_COFFEE = (112, 66, 65) +DEEP_FUCHSIA = (193, 84, 193) +DEEP_JUNGLE_GREEN = (0, 75, 73) +DEEP_LILAC = (153, 85, 187) +DEEP_MAGENTA = (204, 0, 204) +DEEP_PEACH = (255, 203, 164) +DEEP_PINK = (255, 20, 147) +DEEP_RUBY = (132, 63, 91) +DEEP_SAFFRON = (255, 153, 51) +DEEP_SKY_BLUE = (0, 191, 255) +DEEP_TUSCAN_RED = (102, 66, 77) +DENIM = (21, 96, 189) +DESERT = (193, 154, 107) +DESERT_SAND = (237, 201, 175) +DIM_GRAY = (105, 105, 105) +DODGER_BLUE = (30, 144, 255) +DOGWOOD_ROSE = (215, 24, 104) +DOLLAR_BILL = (133, 187, 101) +DRAB = (150, 113, 23) +DUKE_BLUE = (0, 0, 156) +EARTH_YELLOW = (225, 169, 95) +EBONY = (85, 93, 80) +ECRU = (194, 178, 128) +EGGPLANT = (97, 64, 81) +EGGSHELL = (240, 234, 214) +EGYPTIAN_BLUE = (16, 52, 166) +ELECTRIC_BLUE = (125, 249, 255) +ELECTRIC_CRIMSON = (255, 0, 63) +ELECTRIC_CYAN = (0, 255, 255) +ELECTRIC_GREEN = (0, 255, 0) +ELECTRIC_INDIGO = (111, 0, 255) +ELECTRIC_LAVENDER = (244, 187, 255) +ELECTRIC_LIME = (204, 255, 0) +ELECTRIC_PURPLE = (191, 0, 255) +ELECTRIC_ULTRAMARINE = (63, 0, 255) +ELECTRIC_VIOLET = (143, 0, 255) +ELECTRIC_YELLOW = (255, 255, 0) +EMERALD = (80, 200, 120) +ENGLISH_LAVENDER = (180, 131, 149) +ETON_BLUE = (150, 200, 162) +FALLOW = (193, 154, 107) +FALU_RED = (128, 24, 24) +FANDANGO = (181, 51, 137) +FASHION_FUCHSIA = (244, 0, 161) +FAWN = (229, 170, 112) +FELDGRAU = (77, 93, 83) +FERN_GREEN = (79, 121, 66) +FERRARI_RED = (255, 40, 0) +FIELD_DRAB = (108, 84, 30) +FIRE_ENGINE_RED = (206, 32, 41) +FIREBRICK = (178, 34, 34) +FLAME = (226, 88, 34) +FLAMINGO_PINK = (252, 142, 172) +FLAVESCENT = (247, 233, 142) +FLAX = (238, 220, 130) +FLORAL_WHITE = (255, 250, 240) +FLUORESCENT_ORANGE = (255, 191, 0) +FLUORESCENT_PINK = (255, 20, 147) +FLUORESCENT_YELLOW = (204, 255, 0) +FOLLY = (255, 0, 79) +FOREST_GREEN_TRADITIONAL = (1, 68, 33) +FOREST_GREEN_WEB = (34, 139, 34) +FRENCH_BEIGE = (166, 123, 91) +FRENCH_BLUE = (0, 114, 187) +FRENCH_LILAC = (134, 96, 142) +FRENCH_LIME = (204, 255, 0) +FRENCH_RASPBERRY = (199, 44, 72) +FRENCH_ROSE = (246, 74, 138) +FUCHSIA = (255, 0, 255) +FUCHSIA_CRAYOLA = (193, 84, 193) +FUCHSIA_PINK = (255, 119, 255) +FUCHSIA_ROSE = (199, 67, 117) +FULVOUS = (228, 132, 0) +FUZZY_WUZZY = (204, 102, 102) +GAINSBORO = (220, 220, 220) +GAMBOGE = (228, 155, 15) +GHOST_WHITE = (248, 248, 255) +GINGER = (176, 101, 0) +GLAUCOUS = (96, 130, 182) +GLITTER = (230, 232, 250) +GOLD_METALLIC = (212, 175, 55) +GOLD_WEB_GOLDEN = (255, 215, 0) +GOLDEN_BROWN = (153, 101, 21) +GOLDEN_POPPY = (252, 194, 0) +GOLDEN_YELLOW = (255, 223, 0) +GOLDENROD = (218, 165, 32) +GRANNY_SMITH_APPLE = (168, 228, 160) +GRAY = (128, 128, 128) +GRAY_ASPARAGUS = (70, 89, 69) +GRAY_HTML_CSS_GRAY = (128, 128, 128) +GRAY_X11_GRAY = (190, 190, 190) +GREEN = (0, 255, 0) +GREEN_CRAYOLA = (28, 172, 120) +GREEN_HTML_CSS_GREEN = (0, 128, 0) +GREEN_MUNSELL = (0, 168, 119) +GREEN_NCS = (0, 159, 107) +GREEN_PIGMENT = (0, 165, 80) +GREEN_RYB = (102, 176, 50) +GREEN_YELLOW = (173, 255, 47) +GRULLO = (169, 154, 134) +GUPPIE_GREEN = (0, 255, 127) +HALAY_BE = (102, 56, 84) +HAN_BLUE = (68, 108, 207) +HAN_PURPLE = (82, 24, 250) +HANSA_YELLOW = (233, 214, 107) +HARLEQUIN = (63, 255, 0) +HARVARD_CRIMSON = (201, 0, 22) +HARVEST_GOLD = (218, 145, 0) +HEART_GOLD = (128, 128, 0) +HELIOTROPE = (223, 115, 255) +HOLLYWOOD_CERISE = (244, 0, 161) +HONEYDEW = (240, 255, 240) +HONOLULU_BLUE = (0, 127, 191) +HOOKER_S_GREEN = (73, 121, 107) +HOT_MAGENTA = (255, 29, 206) +HOT_PINK = (255, 105, 180) +HUNTER_GREEN = (53, 94, 59) +ICEBERG = (113, 166, 210) +ICTERINE = (252, 247, 94) +IMPERIAL_BLUE = (0, 35, 149) +INCHWORM = (178, 236, 93) +INDIA_GREEN = (19, 136, 8) +INDIAN_RED = (205, 92, 92) +INDIAN_YELLOW = (227, 168, 87) +INDIGO = (111, 0, 255) +INDIGO_DYE = (0, 65, 106) +INDIGO_WEB = (75, 0, 130) +INTERNATIONAL_KLEIN_BLUE = (0, 47, 167) +INTERNATIONAL_ORANGE_AEROSPACE = (255, 79, 0) +INTERNATIONAL_ORANGE_ENGINEERING = (186, 22, 12) +INTERNATIONAL_ORANGE_GOLDEN_GATE_BRIDGE = (192, 54, 44) +IRIS = (90, 79, 207) +ISABELLINE = (244, 240, 236) +ISLAMIC_GREEN = (0, 144, 0) +IVORY = (255, 255, 240) +JADE = (0, 168, 107) +JASMINE = (248, 222, 126) +JASPER = (215, 59, 62) +JAZZBERRY_JAM = (165, 11, 94) +JET = (52, 52, 52) +JONQUIL = (250, 218, 94) +JUNE_BUD = (189, 218, 87) +JUNGLE_GREEN = (41, 171, 135) +KELLY_GREEN = (76, 187, 23) +KENYAN_COPPER = (124, 28, 5) +KHAKI_HTML_CSS_KHAKI = (195, 176, 145) +KHAKI_X11_LIGHT_KHAKI = (240, 230, 140) +KU_CRIMSON = (232, 0, 13) +LA_SALLE_GREEN = (8, 120, 48) +LANGUID_LAVENDER = (214, 202, 221) +LAPIS_LAZULI = (38, 97, 156) +LASER_LEMON = (254, 254, 34) +LAUREL_GREEN = (169, 186, 157) +LAVA = (207, 16, 32) +LAVENDER_BLUE = (204, 204, 255) +LAVENDER_BLUSH = (255, 240, 245) +LAVENDER_FLORAL = (181, 126, 220) +LAVENDER_GRAY = (196, 195, 208) +LAVENDER_INDIGO = (148, 87, 235) +LAVENDER_MAGENTA = (238, 130, 238) +LAVENDER_MIST = (230, 230, 250) +LAVENDER_PINK = (251, 174, 210) +LAVENDER_PURPLE = (150, 123, 182) +LAVENDER_ROSE = (251, 160, 227) +LAVENDER_WEB = (230, 230, 250) +LAWN_GREEN = (124, 252, 0) +LEMON = (255, 247, 0) +LEMON_CHIFFON = (255, 250, 205) +LEMON_LIME = (227, 255, 0) +LICORICE = (26, 17, 16) +LIGHT_APRICOT = (253, 213, 177) +LIGHT_BLUE = (173, 216, 230) +LIGHT_BROWN = (181, 101, 29) +LIGHT_CARMINE_PINK = (230, 103, 113) +LIGHT_CORAL = (240, 128, 128) +LIGHT_CORNFLOWER_BLUE = (147, 204, 234) +LIGHT_CRIMSON = (245, 105, 145) +LIGHT_CYAN = (224, 255, 255) +LIGHT_FUCHSIA_PINK = (249, 132, 239) +LIGHT_GOLDENROD_YELLOW = (250, 250, 210) +LIGHT_GRAY = (211, 211, 211) +LIGHT_GREEN = (144, 238, 144) +LIGHT_KHAKI = (240, 230, 140) +LIGHT_PASTEL_PURPLE = (177, 156, 217) +LIGHT_PINK = (255, 182, 193) +LIGHT_RED_OCHRE = (233, 116, 81) +LIGHT_SALMON = (255, 160, 122) +LIGHT_SALMON_PINK = (255, 153, 153) +LIGHT_SEA_GREEN = (32, 178, 170) +LIGHT_SKY_BLUE = (135, 206, 250) +LIGHT_SLATE_GRAY = (119, 136, 153) +LIGHT_TAUPE = (179, 139, 109) +LIGHT_THULIAN_PINK = (230, 143, 172) +LIGHT_YELLOW = (255, 255, 224) +LILAC = (200, 162, 200) +LIME = (191, 255, 0) +LIME_GREEN = (50, 205, 50) +LIME_WEB_X11_GREEN = (0, 255, 0) +LIMERICK = (157, 194, 9) +LINCOLN_GREEN = (25, 89, 5) +LINEN = (250, 240, 230) +LION = (193, 154, 107) +LITTLE_BOY_BLUE = (108, 160, 220) +LIVER = (83, 75, 79) +LUST = (230, 32, 32) +MAGENTA = (255, 0, 255) +MAGENTA_DYE = (202, 31, 123) +MAGENTA_PROCESS = (255, 0, 144) +MAGIC_MINT = (170, 240, 209) +MAGNOLIA = (248, 244, 255) +MAHOGANY = (192, 64, 0) +MAIZE = (251, 236, 93) +MAJORELLE_BLUE = (96, 80, 220) +MALACHITE = (11, 218, 81) +MANATEE = (151, 154, 170) +MANGO_TANGO = (255, 130, 67) +MANTIS = (116, 195, 101) +MARDI_GRAS = (136, 0, 133) +MAROON_CRAYOLA = (195, 33, 72) +MAROON_HTML_CSS = (128, 0, 0) +MAROON_X11 = (176, 48, 96) +MAUVE = (224, 176, 255) +MAUVE_TAUPE = (145, 95, 109) +MAUVELOUS = (239, 152, 170) +MAYA_BLUE = (115, 194, 251) +MEAT_BROWN = (229, 183, 59) +MEDIUM_AQUAMARINE = (102, 221, 170) +MEDIUM_BLUE = (0, 0, 205) +MEDIUM_CANDY_APPLE_RED = (226, 6, 44) +MEDIUM_CARMINE = (175, 64, 53) +MEDIUM_CHAMPAGNE = (243, 229, 171) +MEDIUM_ELECTRIC_BLUE = (3, 80, 150) +MEDIUM_JUNGLE_GREEN = (28, 53, 45) +MEDIUM_LAVENDER_MAGENTA = (221, 160, 221) +MEDIUM_ORCHID = (186, 85, 211) +MEDIUM_PERSIAN_BLUE = (0, 103, 165) +MEDIUM_PURPLE = (147, 112, 219) +MEDIUM_RED_VIOLET = (187, 51, 133) +MEDIUM_RUBY = (170, 64, 105) +MEDIUM_SEA_GREEN = (60, 179, 113) +MEDIUM_SLATE_BLUE = (123, 104, 238) +MEDIUM_SPRING_BUD = (201, 220, 135) +MEDIUM_SPRING_GREEN = (0, 250, 154) +MEDIUM_TAUPE = (103, 76, 71) +MEDIUM_TURQUOISE = (72, 209, 204) +MEDIUM_TUSCAN_RED = (121, 68, 59) +MEDIUM_VERMILION = (217, 96, 59) +MEDIUM_VIOLET_RED = (199, 21, 133) +MELLOW_APRICOT = (248, 184, 120) +MELLOW_YELLOW = (248, 222, 126) +MELON = (253, 188, 180) +MIDNIGHT_BLUE = (25, 25, 112) +MIDNIGHT_GREEN_EAGLE_GREEN = (0, 73, 83) +MIKADO_YELLOW = (255, 196, 12) +MINT = (62, 180, 137) +MINT_CREAM = (245, 255, 250) +MINT_GREEN = (152, 255, 152) +MISTY_ROSE = (255, 228, 225) +MOCCASIN = (250, 235, 215) +MODE_BEIGE = (150, 113, 23) +MOONSTONE_BLUE = (115, 169, 194) +MORDANT_RED_19 = (174, 12, 0) +MOSS_GREEN = (173, 223, 173) +MOUNTAIN_MEADOW = (48, 186, 143) +MOUNTBATTEN_PINK = (153, 122, 141) +MSU_GREEN = (24, 69, 59) +MULBERRY = (197, 75, 140) +MUSTARD = (255, 219, 88) +MYRTLE = (33, 66, 30) +NADESHIKO_PINK = (246, 173, 198) +NAPIER_GREEN = (42, 128, 0) +NAPLES_YELLOW = (250, 218, 94) +NAVAJO_WHITE = (255, 222, 173) +NAVY_BLUE = (0, 0, 128) +NEON_CARROT = (255, 163, 67) +NEON_FUCHSIA = (254, 65, 100) +NEON_GREEN = (57, 255, 20) +NEW_YORK_PINK = (215, 131, 127) +NON_PHOTO_BLUE = (164, 221, 237) +NORTH_TEXAS_GREEN = (5, 144, 51) +OCEAN_BOAT_BLUE = (0, 119, 190) +OCHRE = (204, 119, 34) +OFFICE_GREEN = (0, 128, 0) +OLD_GOLD = (207, 181, 59) +OLD_LACE = (253, 245, 230) +OLD_LAVENDER = (121, 104, 120) +OLD_MAUVE = (103, 49, 71) +OLD_ROSE = (192, 128, 129) +OLIVE = (128, 128, 0) +OLIVE_DRAB_7 = (60, 52, 31) +OLIVE_DRAB_WEB_OLIVE_DRAB_3 = (107, 142, 35) +OLIVINE = (154, 185, 115) +ONYX = (53, 56, 57) +OPERA_MAUVE = (183, 132, 167) +ORANGE = (255, 127, 0) +ORANGE_PEEL = (255, 159, 0) +ORANGE_RED = (255, 69, 0) +ORANGE_RYB = (251, 153, 2) +ORANGE_WEB_COLOR = (255, 165, 0) +ORCHID = (218, 112, 214) +OTTER_BROWN = (101, 67, 33) +OU_CRIMSON_RED = (153, 0, 0) +OUTER_SPACE = (65, 74, 76) +OUTRAGEOUS_ORANGE = (255, 110, 74) +OXFORD_BLUE = (0, 33, 71) +PAKISTAN_GREEN = (0, 102, 0) +PALATINATE_BLUE = (39, 59, 226) +PALATINATE_PURPLE = (104, 40, 96) +PALE_AQUA = (188, 212, 230) +PALE_BLUE = (175, 238, 238) +PALE_BROWN = (152, 118, 84) +PALE_CARMINE = (175, 64, 53) +PALE_CERULEAN = (155, 196, 226) +PALE_CHESTNUT = (221, 173, 175) +PALE_COPPER = (218, 138, 103) +PALE_CORNFLOWER_BLUE = (171, 205, 239) +PALE_GOLD = (230, 190, 138) +PALE_GOLDENROD = (238, 232, 170) +PALE_GREEN = (152, 251, 152) +PALE_LAVENDER = (220, 208, 255) +PALE_MAGENTA = (249, 132, 229) +PALE_PINK = (250, 218, 221) +PALE_PLUM = (221, 160, 221) +PALE_RED_VIOLET = (219, 112, 147) +PALE_ROBIN_EGG_BLUE = (150, 222, 209) +PALE_SILVER = (201, 192, 187) +PALE_SPRING_BUD = (236, 235, 189) +PALE_TAUPE = (188, 152, 126) +PALE_VIOLET_RED = (219, 112, 147) +PANSY_PURPLE = (120, 24, 74) +PAPAYA_WHIP = (255, 239, 213) +PARIS_GREEN = (80, 200, 120) +PASTEL_BLUE = (174, 198, 207) +PASTEL_BROWN = (131, 105, 83) +PASTEL_GRAY = (207, 207, 196) +PASTEL_GREEN = (119, 221, 119) +PASTEL_MAGENTA = (244, 154, 194) +PASTEL_ORANGE = (255, 179, 71) +PASTEL_PINK = (222, 165, 164) +PASTEL_PURPLE = (179, 158, 181) +PASTEL_RED = (255, 105, 97) +PASTEL_VIOLET = (203, 153, 201) +PASTEL_YELLOW = (253, 253, 150) +PATRIARCH = (128, 0, 128) +PAYNE_S_GREY = (83, 104, 120) +PEACH = (255, 229, 180) +PEACH_CRAYOLA = (255, 203, 164) +PEACH_ORANGE = (255, 204, 153) +PEACH_PUFF = (255, 218, 185) +PEACH_YELLOW = (250, 223, 173) +PEAR = (209, 226, 49) +PEARL = (234, 224, 200) +PEARL_AQUA = (136, 216, 192) +PEARLY_PURPLE = (183, 104, 162) +PERIDOT = (230, 226, 0) +PERIWINKLE = (204, 204, 255) +PERSIAN_BLUE = (28, 57, 187) +PERSIAN_GREEN = (0, 166, 147) +PERSIAN_INDIGO = (50, 18, 122) +PERSIAN_ORANGE = (217, 144, 88) +PERSIAN_PINK = (247, 127, 190) +PERSIAN_PLUM = (112, 28, 28) +PERSIAN_RED = (204, 51, 51) +PERSIAN_ROSE = (254, 40, 162) +PERSIMMON = (236, 88, 0) +PERU = (205, 133, 63) +PHLOX = (223, 0, 255) +PHTHALO_BLUE = (0, 15, 137) +PHTHALO_GREEN = (18, 53, 36) +PIGGY_PINK = (253, 221, 230) +PINE_GREEN = (1, 121, 111) +PINK = (255, 192, 203) +PINK_LACE = (255, 221, 244) +PINK_ORANGE = (255, 153, 102) +PINK_PEARL = (231, 172, 207) +PINK_SHERBET = (247, 143, 167) +PISTACHIO = (147, 197, 114) +PLATINUM = (229, 228, 226) +PLUM_TRADITIONAL = (142, 69, 133) +PLUM_WEB = (221, 160, 221) +PORTLAND_ORANGE = (255, 90, 54) +POWDER_BLUE_WEB = (176, 224, 230) +PRINCETON_ORANGE = (255, 143, 0) +PRUNE = (112, 28, 28) +PRUSSIAN_BLUE = (0, 49, 83) +PSYCHEDELIC_PURPLE = (223, 0, 255) +PUCE = (204, 136, 153) +PUMPKIN = (255, 117, 24) +PURPLE_HEART = (105, 53, 156) +PURPLE_HTML_CSS = (128, 0, 128) +PURPLE_MOUNTAIN_MAJESTY = (150, 120, 182) +PURPLE_MUNSELL = (159, 0, 197) +PURPLE_PIZZAZZ = (254, 78, 218) +PURPLE_TAUPE = (80, 64, 77) +PURPLE_X11 = (160, 32, 240) +QUARTZ = (81, 72, 79) +RACKLEY = (93, 138, 168) +RADICAL_RED = (255, 53, 94) +RAJAH = (251, 171, 96) +RASPBERRY = (227, 11, 93) +RASPBERRY_GLACE = (145, 95, 109) +RASPBERRY_PINK = (226, 80, 152) +RASPBERRY_ROSE = (179, 68, 108) +RAW_UMBER = (130, 102, 68) +RAZZLE_DAZZLE_ROSE = (255, 51, 204) +RAZZMATAZZ = (227, 37, 107) +RED = (255, 0, 0) +RED_BROWN = (165, 42, 42) +RED_DEVIL = (134, 1, 17) +RED_MUNSELL = (242, 0, 60) +RED_NCS = (196, 2, 51) +RED_ORANGE = (255, 83, 73) +RED_PIGMENT = (237, 28, 36) +RED_RYB = (254, 39, 18) +RED_VIOLET = (199, 21, 133) +REDWOOD = (171, 78, 82) +REGALIA = (82, 45, 128) +RESOLUTION_BLUE = (0, 35, 135) +RICH_BLACK = (0, 64, 64) +RICH_BRILLIANT_LAVENDER = (241, 167, 254) +RICH_CARMINE = (215, 0, 64) +RICH_ELECTRIC_BLUE = (8, 146, 208) +RICH_LAVENDER = (167, 107, 207) +RICH_LILAC = (182, 102, 210) +RICH_MAROON = (176, 48, 96) +RIFLE_GREEN = (65, 72, 51) +ROBIN_EGG_BLUE = (0, 204, 204) +ROSE = (255, 0, 127) +ROSE_BONBON = (249, 66, 158) +ROSE_EBONY = (103, 72, 70) +ROSE_GOLD = (183, 110, 121) +ROSE_MADDER = (227, 38, 54) +ROSE_PINK = (255, 102, 204) +ROSE_QUARTZ = (170, 152, 169) +ROSE_TAUPE = (144, 93, 93) +ROSE_VALE = (171, 78, 82) +ROSEWOOD = (101, 0, 11) +ROSSO_CORSA = (212, 0, 0) +ROSY_BROWN = (188, 143, 143) +ROYAL_AZURE = (0, 56, 168) +ROYAL_BLUE_TRADITIONAL = (0, 35, 102) +ROYAL_BLUE_WEB = (65, 105, 225) +ROYAL_FUCHSIA = (202, 44, 146) +ROYAL_PURPLE = (120, 81, 169) +ROYAL_YELLOW = (250, 218, 94) +RUBINE_RED = (209, 0, 86) +RUBY = (224, 17, 95) +RUBY_RED = (155, 17, 30) +RUDDY = (255, 0, 40) +RUDDY_BROWN = (187, 101, 40) +RUDDY_PINK = (225, 142, 150) +RUFOUS = (168, 28, 7) +RUSSET = (128, 70, 27) +RUST = (183, 65, 14) +RUSTY_RED = (218, 44, 67) +SACRAMENTO_STATE_GREEN = (0, 86, 63) +SADDLE_BROWN = (139, 69, 19) +SAFETY_ORANGE_BLAZE_ORANGE = (255, 103, 0) +SAFFRON = (244, 196, 48) +SALMON = (255, 140, 105) +SALMON_PINK = (255, 145, 164) +SAND = (194, 178, 128) +SAND_DUNE = (150, 113, 23) +SANDSTORM = (236, 213, 64) +SANDY_BROWN = (244, 164, 96) +SANDY_TAUPE = (150, 113, 23) +SANGRIA = (146, 0, 10) +SAP_GREEN = (80, 125, 42) +SAPPHIRE = (15, 82, 186) +SAPPHIRE_BLUE = (0, 103, 165) +SATIN_SHEEN_GOLD = (203, 161, 53) +SCARLET = (255, 36, 0) +SCARLET_CRAYOLA = (253, 14, 53) +SCHOOL_BUS_YELLOW = (255, 216, 0) +SCREAMIN_GREEN = (118, 255, 122) +SEA_BLUE = (0, 105, 148) +SEA_GREEN = (46, 139, 87) +SEAL_BROWN = (50, 20, 20) +SEASHELL = (255, 245, 238) +SELECTIVE_YELLOW = (255, 186, 0) +SEPIA = (112, 66, 20) +SHADOW = (138, 121, 93) +SHAMROCK_GREEN = (0, 158, 96) +SHOCKING_PINK = (252, 15, 192) +SHOCKING_PINK_CRAYOLA = (255, 111, 255) +SIENNA = (136, 45, 23) +SILVER = (192, 192, 192) +SINOPIA = (203, 65, 11) +SKOBELOFF = (0, 116, 116) +SKY_BLUE = (135, 206, 235) +SKY_MAGENTA = (207, 113, 175) +SLATE_BLUE = (106, 90, 205) +SLATE_GRAY = (112, 128, 144) +SMALT_DARK_POWDER_BLUE = (0, 51, 153) +SMOKEY_TOPAZ = (147, 61, 65) +SMOKY_BLACK = (16, 12, 8) +SNOW = (255, 250, 250) +SPIRO_DISCO_BALL = (15, 192, 252) +SPRING_BUD = (167, 252, 0) +SPRING_GREEN = (0, 255, 127) +ST_PATRICK_S_BLUE = (35, 41, 122) +STEEL_BLUE = (70, 130, 180) +STIL_DE_GRAIN_YELLOW = (250, 218, 94) +STIZZA = (153, 0, 0) +STORMCLOUD = (79, 102, 106) +STRAW = (228, 217, 111) +SUNGLOW = (255, 204, 51) +SUNSET = (250, 214, 165) +TAN = (210, 180, 140) +TANGELO = (249, 77, 0) +TANGERINE = (242, 133, 0) +TANGERINE_YELLOW = (255, 204, 0) +TANGO_PINK = (228, 113, 122) +TAUPE = (72, 60, 50) +TAUPE_GRAY = (139, 133, 137) +TEA_GREEN = (208, 240, 192) +TEA_ROSE_ORANGE = (248, 131, 121) +TEA_ROSE_ROSE = (244, 194, 194) +TEAL = (0, 128, 128) +TEAL_BLUE = (54, 117, 136) +TEAL_GREEN = (0, 130, 127) +TELEMAGENTA = (207, 52, 118) +TENN_TAWNY = (205, 87, 0) +TERRA_COTTA = (226, 114, 91) +THISTLE = (216, 191, 216) +THULIAN_PINK = (222, 111, 161) +TICKLE_ME_PINK = (252, 137, 172) +TIFFANY_BLUE = (10, 186, 181) +TIGER_S_EYE = (224, 141, 60) +TIMBERWOLF = (219, 215, 210) +TITANIUM_YELLOW = (238, 230, 0) +TOMATO = (255, 99, 71) +TOOLBOX = (116, 108, 192) +TOPAZ = (255, 200, 124) +TRACTOR_RED = (253, 14, 53) +TROLLEY_GREY = (128, 128, 128) +TROPICAL_RAIN_FOREST = (0, 117, 94) +TRUE_BLUE = (0, 115, 207) +TUFTS_BLUE = (65, 125, 193) +TUMBLEWEED = (222, 170, 136) +TURKISH_ROSE = (181, 114, 129) +TURQUOISE = (48, 213, 200) +TURQUOISE_BLUE = (0, 255, 239) +TURQUOISE_GREEN = (160, 214, 180) +TUSCAN_RED = (124, 72, 72) +TWILIGHT_LAVENDER = (138, 73, 107) +TYRIAN_PURPLE = (102, 2, 60) +UA_BLUE = (0, 51, 170) +UA_RED = (217, 0, 76) +UBE = (136, 120, 195) +UCLA_BLUE = (83, 104, 149) +UCLA_GOLD = (255, 179, 0) +UFO_GREEN = (60, 208, 112) +ULTRA_PINK = (255, 111, 255) +ULTRAMARINE = (18, 10, 143) +ULTRAMARINE_BLUE = (65, 102, 245) +UMBER = (99, 81, 71) +UNBLEACHED_SILK = (255, 221, 202) +UNITED_NATIONS_BLUE = (91, 146, 229) +UNIVERSITY_OF_CALIFORNIA_GOLD = (183, 135, 39) +UNMELLOW_YELLOW = (255, 255, 102) +UP_FOREST_GREEN = (1, 68, 33) +UP_MAROON = (123, 17, 19) +UPSDELL_RED = (174, 32, 41) +UROBILIN = (225, 173, 33) +USAFA_BLUE = (0, 79, 152) +USC_CARDINAL = (153, 0, 0) +USC_GOLD = (255, 204, 0) +UTAH_CRIMSON = (211, 0, 63) +VANILLA = (243, 229, 171) +VEGAS_GOLD = (197, 179, 88) +VENETIAN_RED = (200, 8, 21) +VERDIGRIS = (67, 179, 174) +VERMILION_CINNABAR = (227, 66, 52) +VERMILION_PLOCHERE = (217, 96, 59) +VERONICA = (160, 32, 240) +VIOLET = (143, 0, 255) +VIOLET_BLUE = (50, 74, 178) +VIOLET_COLOR_WHEEL = (127, 0, 255) +VIOLET_RYB = (134, 1, 175) +VIOLET_WEB = (238, 130, 238) +VIRIDIAN = (64, 130, 109) +VIVID_AUBURN = (146, 39, 36) +VIVID_BURGUNDY = (159, 29, 53) +VIVID_CERISE = (218, 29, 129) +VIVID_TANGERINE = (255, 160, 137) +VIVID_VIOLET = (159, 0, 255) +WARM_BLACK = (0, 66, 66) +WATERSPOUT = (164, 244, 249) +WENGE = (100, 84, 82) +WHEAT = (245, 222, 179) +WHITE = (255, 255, 255) +WHITE_SMOKE = (245, 245, 245) +WILD_BLUE_YONDER = (162, 173, 208) +WILD_STRAWBERRY = (255, 67, 164) +WILD_WATERMELON = (252, 108, 133) +WINE = (114, 47, 55) +WINE_DREGS = (103, 49, 71) +WISTERIA = (201, 160, 220) +WOOD_BROWN = (193, 154, 107) +XANADU = (115, 134, 120) +YALE_BLUE = (15, 77, 146) +YELLOW = (255, 255, 0) +YELLOW_GREEN = (154, 205, 50) +YELLOW_MUNSELL = (239, 204, 0) +YELLOW_NCS = (255, 211, 0) +YELLOW_ORANGE = (255, 174, 66) +YELLOW_PROCESS = (255, 239, 0) +YELLOW_RYB = (254, 254, 51) +ZAFFRE = (0, 20, 168) +ZINNWALDITE_BROWN = (44, 22, 8) diff --git a/skimage/novice/make_colors.py b/skimage/novice/make_colors.py new file mode 100644 index 00000000..2c14063d --- /dev/null +++ b/skimage/novice/make_colors.py @@ -0,0 +1,60 @@ +#!/usr/bin/python +import argparse, csv + +# Imports color names from a CSV file (colors.csv) and outputs a Python file +# with color name definitions (colors.py). + +def download_colors(path): + import urllib2, re + from bs4 import BeautifulSoup + + # All colors seem to be on this page + url = "http://en.wikipedia.org/wiki/List_of_colors:_A-M" + request = urllib2.Request(url) + opener = urllib2.build_opener() + request.add_header("User-Agent", "Mozilla/5.0") + html = opener.open(request).read() + + # Find first table with "Color names" caption + soup = BeautifulSoup(html, "lxml") + color_table = [t for t in soup.findAll("table") if t.find("caption") is not None + and t.find("caption").string == "Color names"][0] + + with open(path, "w") as out_file: + writer = csv.writer(out_file) + + # Each table row has the color name in a th and the hex + # color in the second td cell. + for row in color_table.findAll("tr"): + th = row.find("th") + cells = row.findAll("td") + if th is None or len(cells) < 2: + continue + + name = th.string.encode("ascii", "ignore") + + # Strip parens and replace non-alphanumeric characters with underscores + id_name = re.sub("[^a-zA-Z0-9]", "_", name.lower().replace("(", "").replace(")", "")) + hex_str = cells[1].string.encode("ascii", "ignore") + r, g, b = (int(hex_str[1:3], 16), int(hex_str[3:5], 16), int(hex_str[5:7], 16)) + + writer.writerow((id_name, name, hex_str, str(r), str(g), str(b))) + +# -------------------------------------------------- + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--input", "-i", type=str, default="colors.csv", help="Input file (CSV)") + parser.add_argument("--output", "-o", type=str, default="colors.py", help="Output file (Python)") + parser.add_argument("--download", "-d", action="store_true", help="Download from Wikipedia") + args = parser.parse_args() + + if args.download: + download_colors(args.input) + + with open(args.input, "r") as input_file: + with open(args.output, "w") as output_file: + for row in csv.reader(input_file): + name = row[0].upper() + rgb = (int(row[-3]), int(row[-2]), int(row[-1])) + output_file.write("{0} = {1}\n".format(name, rgb)) diff --git a/skimage/novice/novice.py b/skimage/novice/novice.py new file mode 100644 index 00000000..0744afc5 --- /dev/null +++ b/skimage/novice/novice.py @@ -0,0 +1,778 @@ +import os, numpy as np, imghdr +from skimage.util import img_as_ubyte +import skimage.io, skimage.transform + +# ================================================== + +class Pixel(object): + """A single pixel in a Picture. + + Attributes + ---------- + pic : Picture + The Picture object that this pixel references. + image : array_like + Byte array with raw image data (RGB). + x : int + Horizontal coordinate of this pixel (left = 0). + y : int + Vertical coordinate of this pixel (bottom = 0). + rgb : tuple + RGB tuple with red, green, and blue components (0-255) + + """ + def __init__(self, pic, image, x, y, rgb): + self._picture = pic + self._image = image + self._x = x + self._y = y + self._red = self._validate(rgb[0]) + self._green = self._validate(rgb[1]) + self._blue = self._validate(rgb[2]) + + @property + def x(self): + """Gets the horizontal location (left = 0). + + Returns + ------- + x : int + The horizontal location of the pixel. + + """ + return self._x + + @property + def y(self): + """Gets the vertical location (bottom = 0). + + Returns + ------- + y : int + The vertical location of the pixel. + + """ + return self._y + + @property + def red(self): + """Gets the red component of the pixel. + + Returns + ------- + value : int + The red component of the pixel (0-255). + """ + return self._red + + @red.setter + def red(self, value): + """Sets the red component of the pixel. + + Parameters + ---------- + value : int + Red component of the pixel (0-255) + + """ + self._red = self._validate(value) + self._setpixel() + + @property + def green(self): + """Gets the green component of the pixel. + + Returns + ------- + value : int + The green component of the pixel (0-255). + """ + return self._green + + @green.setter + def green(self, value): + """Sets the green component of the pixel. + + Parameters + ---------- + value : int + Green component of the pixel (0-255) + + """ + self._green = self._validate(value) + self._setpixel() + + @property + def blue(self): + """Gets the blue component of the pixel. + + Returns + ------- + value : int + The blue component of the pixel (0-255). + """ + return self._blue + + @blue.setter + def blue(self, value): + """Sets the blue component of the pixel. + + Parameters + ---------- + value : int + Blue component of the pixel (0-255) + + """ + self._blue = self._validate(value) + self._setpixel() + + @property + def rgb(self): + """Gets the RGB color of the pixel. + + Returns + ---------- + color : tuple + RGB tuple with red, green, and blue components (0-255) + + """ + return (self.red, self.green, self.blue) + + @rgb.setter + def rgb(self, value): + """Sets the RGB color of the pixel. + + Parameters + ---------- + value : tuple + RGB tuple with red, green, and blue components (0-255) + + """ + for v in value: + self._validate(v) + + self._red = value[0] + self._green = value[1] + self._blue = value[2] + self._setpixel() + + def _validate(self, value): + """Verifies that the pixel value is in [0, 255]. + + """ + try: + value = int(value) + if (value < 0) or (value > 255): + raise ValueError() + except ValueError: + raise ValueError("Expected an integer between 0 and 255, but got {0} instead!".format(value)) + + return value + + def _setpixel(self): + """Sets the actual pixel value in the picture. + NOTE: Using Cartesian coordinate system! + + """ + # skimage dimensions are flipped: y, x + self._image[self._picture.height - self._y - 1, self._x] = \ + (self.red, self.green, self.blue) + + # Modified pictures lose their paths + self._picture._picture_path = None + self._picture._picture_modified = True + + def __repr__(self): + return "Pixel (red: {0}, green: {1}, blue: {2})".format(self.red, self.green, self.blue) + +# ================================================== + +class PixelGroup(object): + """A group of Pixel objects that can be manipulated together. + + Attributes + ---------- + pic : Picture + The Picture object that this pixel group references. + key : tuple + tuple with x and y slices or ints for extracting part of raw image data. + + """ + def __init__(self, pic, key): + self._pic = pic + + # Use a slice so that the _getdim and _setdim functions can index + # consistently. + if isinstance(key[0], int): + key = (slice(key[0], key[0] + 1), key[1]) + + if isinstance(key[1], int): + key = (key[0], slice(key[1], key[1] + 1)) + + for dim_slice in key: + if dim_slice.start is not None and dim_slice.start < 0: + raise IndexError("Negative slicing not supported") + + if dim_slice.stop is not None and dim_slice.stop < 0: + raise IndexError("Negative slicing not supported") + + if dim_slice.step is not None and dim_slice.step != 1: + raise IndexError("Only a step size of 1 is supported") + + # =========== + # Flip y axis + # =========== + y_slice = key[1] + start = y_slice.start if y_slice.start is not None else 0 + stop = y_slice.stop if y_slice.stop is not None else pic.height + + start = pic.height - start - 1 + stop = pic.height - stop + + key = (key[0], slice(stop, start + 1, y_slice.step)) + + # skimage dimensions are flipped: y, x + self._key = (key[1], key[0]) + self._image = pic._image + + # Save slice for _getdim operations. + # This allows you to swap parts of an image. + self._slice = self._image[self._key[0], self._key[1]] + + shape = self._getdim(0).shape + self.size = (shape[1], shape[0]) + + def _getdim(self, dim): + """Gets a specific dimension out of the raw image data slice. + + """ + return self._slice[:, :, dim] + + def _setdim(self, dim, value): + """ Sets a specific dimension in the raw image data slice. + + """ + self._image[self._key[0], self._key[1], dim] = value + + @property + def red(self): + """Gets the red component of the pixel. + + Returns + ------- + value : int + The red component of the pixel (0-255). + """ + return self._getdim(0).ravel() + + @red.setter + def red(self, value): + """Sets the red component of the pixel. + + Parameters + ---------- + value : int + Red component of the pixel (0-255) + + """ + self._setdim(0, value) + + @property + def green(self): + """Gets the green component of the pixel. + + Returns + ------- + value : int + The green component of the pixel (0-255). + """ + return self._getdim(1).ravel() + + @green.setter + def green(self, value): + """Sets the green component of the pixel. + + Parameters + ---------- + value : int + green component of the pixel (0-255) + + """ + self._setdim(1, value) + + @property + def blue(self): + """Gets the blue component of the pixel. + + Returns + ------- + value : int + The blue component of the pixel (0-255). + """ + return self._getdim(2).ravel() + + @blue.setter + def blue(self, value): + """Sets the blue component of the pixel. + + Parameters + ---------- + value : int + blue component of the pixel (0-255) + + """ + self._setdim(2, value) + + @property + def rgb(self): + """Gets the RGB color of the pixel. + + Returns + ---------- + color : tuple + RGB tuple with red, green, and blue components (0-255) + + """ + return self._getdim(None) + + @rgb.setter + def rgb(self, value): + """Sets the RGB color of the pixel. + + Parameters + ---------- + value : tuple + RGB tuple with red, green, and blue components (0-255) + + """ + self._setdim(None, value) + + def __iter__(self): + """Iterates through all pixels in the pixel group. + + """ + x_idx = range(self._pic.width)[self._key[0]] + y_idx = range(self._pic.height)[self._key[1]] + + for x in x_idx: + for y in y_idx: + yield self._pic._makepixel((x, y)) + + def __repr__(self): + return "PixelGroup ({0} pixels)".format(self.size[0] * self.size[1]) + +# ================================================== + +class Picture(object): + """A 2-D picture made up of pixels. + + Attributes + ---------- + path : str + Path to an image file to load. + size : tuple + Size of the empty image to create (width, height). + color : tuple + Color to fill empty image if size is given (red, green, blue) [0-255]. + image : array_like + Raw RGB image data [0-255] + + Notes + ----- + Cannot provide more than one of 'path' and 'size' and 'image'. + Can only provide 'color' if 'size' provided. + + Examples + -------- + Load an image from a file + + >>> pic = Picture(path="/path/to/image/file.png") + + Create a blank 100 pixel wide, 200 pixel tall white image + + >>> pic = Picture(size=(100, 200), color=(255, 255, 255)) + + Use numpy to make an RGB byte array (shape is height x width x 3) + + >>> import numpy as np + >>> data = np.zeros(shape=(200, 100, 3), dtype=np.int8) + >>> data[:, :, 0] = 255 # Set red component to maximum + >>> pic = Picture(image=data) + + """ + def __init__(self, path=None, size=None, color=None, image=None): + # Can only provide either path or size, but not both. + if (path and size) or (path and image) or (size and image): + assert False, "Can only provide path, size, or image." + + # Opening a particular file. Convert the image to RGB + # automatically so (r, g, b) tuples can be used + # everywhere. + elif path is not None: + self._image = skimage.img_as_ubyte(skimage.io.imread(path)) + self._path = path + self._format = imghdr.what(path) + + # Creating a particular size of image. + elif size is not None: + if color is None: + color = (0, 0, 0) + + # skimage dimensions are flipped: y, x + self._image = np.zeros((size[1], size[0], 3), "uint8") + self._image[:, :] = color + self._path = None + self._format = None + elif image is not None: + self._image = image + self._path = None + self._format = None + + # Must have provided 'path', 'size', or 'image'. + else: + assert False, "Must provide one of path, size, or image." + + # Common setup. + self._modified = False + self._inflation = 1 + + @staticmethod + def from_path(path): + """Creates a Picture from an image file. + + Parameters + ---------- + path : str + Path to the image file. + + Returns + ------- + pic : Picture + A Picture with the image file data loaded. + + """ + return Picture(path=path) + + @staticmethod + def from_color(color, size): + """Creates a single color Picture. + + Parameters + ---------- + color : tuple + RGB tuple with the fill color for the picture [0-255] + + size : tuple + Width and height of the picture in pixels. + + Returns + ------- + pic : Picture + A Picture with the given color and size. + + """ + return Picture(color=color, size=size) + + @staticmethod + def from_image(image): + """Creates a single color Picture. + + Parameters + ---------- + color : tuple + RGB tuple with the fill color for the picture [0-255] + + size : tuple + Width and height of the picture in pixels. + + Returns + ------- + pic : Picture + A Picture with the given color and size. + + """ + return Picture(image=image) + + def save(self, path): + """Saves the picture to the given path. + + Parameters + ---------- + path : str + Path to save the picture (with file extension). + + """ + skimage.io.imsave(path, self._inflate(self._image)) + self._modified = False + self._path = os.path.abspath(path) + self._format = imghdr.what(path) + + @property + def path(self): + """Gets the path of the picture. + + Returns + ------- + path : str + The absolute path of the picture or None if modified. + + """ + return self._path + + @property + def modified(self): + """Gets a value indicating if the picture has changed. + + Returns + ------- + modified : bool + True if the picture has been changed, False otherwise. + + """ + return self._modified + + @property + def format(self): + """Gets the format of the picture. + + Returns + ------- + format : str + File format of the picture (e.g., png, jpeg) or None if not saved. + + """ + return self._format + + @property + def size(self): + """Gets size of the picture. + + Returns + ------- + size : tuple + Width and height of the picture in pixels. + + """ + # skimage dimensions are flipped: y, x + return (self._image.shape[1], self._image.shape[0]) + + @size.setter + def size(self, value): + """Sets the size of the picture. + + Parameters + ---------- + value : tuple + Desired width and height of the picture. Will resize image as necessary. + + """ + try: + # Don't resize if no change in size + if (value[0] != self.width) or (value[1] != self.height): + # skimage dimensions are flipped: y, x + self._image = skimage.img_as_ubyte(skimage.transform.resize(self._image, + (int(value[1]), int(value[0])), order=0)) + + self._modified = True + self._path = None + except TypeError: + raise TypeError("Expected (width, height), but got {0} instead!".format(value)) + + @property + def width(self): + """Gets the width of the picture. + + Returns + ------- + width : int + Width of the picture in pixels. + + """ + return self.size[0] + + @width.setter + def width(self, value): + """Sets the width of the picture. + + Parameters + ------- + value : int + Desired width of the picture in pixels. Will resize the image as necessary. + + """ + self.size = (value, self.height) + + @property + def height(self): + """Gets the height of the picture. + + Returns + ------- + height : int + Height of the picture in pixels. + + """ + return self.size[1] + + @height.setter + def height(self, value): + """Sets the height of the picture. + + Parameters + ------- + value : int + Desired height of the picture in pixels. Will resize the image as necessary. + + """ + self.size = (self.width, value) + + @property + def inflation(self): + """Gets the inflation factor. + + Returns + ------- + inflation : int + Factor to scale each pixel by when saving or viewing (1 = no inflation). + + """ + return self._inflation + + @inflation.setter + def inflation(self, value): + """Sets the inflation factor. + + Parameters + ---------- + value : int + Factor to scale each pixel by when saving or viewing (1 = no inflation). + + """ + try: + value = int(value) + if value < 1: + raise ValueError() + self._inflation = value + except ValueError: + raise ValueError("Expected inflation factor to be an integer greater than one") + + def _repr_html_(self): + return skimage.io.Image(self._inflate(self._image)) + + def _repr_png_(self): + return skimage.io.Image(self._inflate(self._image)) + + def show(self): + """Displays the image in a separate window. + + """ + skimage.io.imshow(self._inflate(self._image)) + + def _makepixel(self, xy): + """ Creates a Pixel object for a given x, y location. + + Parameters + ---------- + xy : tuple + Cartesian coordinates to create a Pixel object for. + + """ + # skimage dimensions are flipped: y, x + rgb = self._image[self.height - xy[1] - 1, xy[0]] + return Pixel(self, self._image, xy[0], xy[1], rgb) + + def _inflate(self, img): + """Inflates image according to inflation factor. + + Parameters + ---------- + img : array_like + Raw RGB image data to inflate using nearest neighbor algorithm. + + """ + if self._inflation == 1: + return img + + # skimage dimensions are flipped: y, x + return img_as_ubyte(skimage.transform.resize(img, + (self.height * self._inflation, + self.width * self._inflation), order=0)) + + def __iter__(self): + """Iterates over all pixels in the image. + + """ + for x in xrange(self.width): + for y in xrange(self.height): + yield self._makepixel((x, y)) + + def __getitem__(self, key): + """Gets pixels using 2D int or slice notations. + + Parameters + ---------- + key : tuple + Horizontal and vertical coordinates or slices. + + Returns + ------- + p: Pixel or PixelGroup + Single pixel for coordinates or PixelGroup for slice. + + Examples + -------- + Get the bottom-left pixel + + >>> pic[0, 0] + + Get the top row of the picture + + >>> pic[:, pic.height-1] + + """ + if isinstance(key, tuple) and len(key) == 2: + if isinstance(key[0], int) and isinstance(key[1], int): + if key[0] < 0 or key[1] < 0: + raise IndexError("Negative indices not supported") + + return self._makepixel((key[0], key[1])) + else: + return PixelGroup(self, key) + else: + raise TypeError("Invalid key type") + + def __setitem__(self, key, value): + """Sets pixel values using 2D int or slice notations. + + Parameters + ---------- + key : tuple + Horizontal and vertical coordinates or slices. + value : tuple + RGB tuple with red, green, and blue components [0-255] + + Examples + -------- + Set the bottom-left pixel to black + + >>> pic[0, 0] = (0, 0, 0) + + Set the top row to red + + >>> pic[:, pic.height-1] = (255, 0, 0) + + """ + if isinstance(key, tuple) and len(key) == 2: + if isinstance(value, tuple): + self[key[0], key[1]].rgb = value + elif isinstance(value, PixelGroup): + src_key = self[key[0], key[1]]._key + self._image[src_key] = value._image[value._key] + else: + raise TypeError("Invalid value type") + else: + raise TypeError("Invalid key type") + + def __repr__(self): + return "Picture (format: {0}, path: {1}, modified: {2})".format(self.format, self.path, self.modified) + diff --git a/skimage/novice/tests/test_novice.py b/skimage/novice/tests/test_novice.py new file mode 100644 index 00000000..21451968 --- /dev/null +++ b/skimage/novice/tests/test_novice.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +"""Tests for novice submodule. +:license: modified BSD +""" + +import os, tempfile +from numpy.testing import TestCase, assert_equal, assert_raises +from skimage import novice, data_dir + +class TestNovice(TestCase): + sample_path = os.path.join(data_dir, "elephant.png") + small_sample_path = os.path.join(data_dir, "block.png") + + def test_pic_info(self): + pic = novice.open(self.sample_path) + assert_equal(pic.format, "png") + assert_equal(pic.path, os.path.abspath(self.sample_path)) + assert_equal(pic.size, (665, 500)) + assert_equal(pic.width, 665) + assert_equal(pic.height, 500) + assert_equal(pic.modified, False) + assert_equal(pic.inflation, 1) + + num_pixels = sum(1 for p in pic) + assert_equal(num_pixels, pic.width * pic.height) + + def test_modify(self): + pic = novice.open(self.small_sample_path) + assert_equal(pic.modified, False) + + for p in pic: + if p.x < (pic.width / 2): + p.red /= 2 + p.green /= 2 + p.blue /= 2 + + for p in pic: + if p.x < (pic.width / 2): + assert_equal(p.red <= 128, True) + assert_equal(p.green <= 128, True) + assert_equal(p.blue <= 128, True) + + s = pic.size + pic.size = (pic.width / 2, pic.height / 2) + assert_equal(pic.size, (int(s[0] / 2), int(s[1] / 2))) + + assert_equal(pic.modified, True) + assert_equal(pic.path, None) + + with tempfile.NamedTemporaryFile(suffix=".jpg") as tmp: + pic.save(tmp.name) + + assert_equal(pic.modified, False) + assert_equal(pic.path, os.path.abspath(tmp.name)) + assert_equal(pic.format, "jpeg") + + def test_indexing(self): + pic = novice.open(self.small_sample_path) + + # Slicing + pic[0:5, 0:5] = (0, 0, 0) + for p in pic: + if (p.x < 5) and (p.y < 5): + assert_equal(p.rgb, (0, 0, 0)) + assert_equal(p.red, 0) + assert_equal(p.green, 0) + assert_equal(p.blue, 0) + + pic[:5, :5] = (255, 255, 255) + for p in pic: + if (p.x < 5) and (p.y < 5): + assert_equal(p.rgb, (255, 255, 255)) + assert_equal(p.red, 255) + assert_equal(p.green, 255) + assert_equal(p.blue, 255) + + pic[5:pic.width, 5:pic.height] = (255, 0, 255) + for p in pic: + if (p.x >= 5) and (p.y >= 5): + assert_equal(p.rgb, (255, 0, 255)) + assert_equal(p.red, 255) + assert_equal(p.green, 0) + assert_equal(p.blue, 255) + + pic[5:, 5:] = (0, 0, 255) + for p in pic: + if (p.x >= 5) and (p.y >= 5): + assert_equal(p.rgb, (0, 0, 255)) + assert_equal(p.red, 0) + assert_equal(p.green, 0) + assert_equal(p.blue, 255) + + # Outside bounds + assert_raises(IndexError, lambda: pic[pic.width, pic.height]) + + # Negative indexing not supported + assert_raises(IndexError, lambda: pic[-1, -1]) + assert_raises(IndexError, lambda: pic[-1:, -1:]) + + # Step sizes > 1 not supported + assert_raises(IndexError, lambda: pic[::2, ::2]) + + def test_slicing(self): + cut = 40 + pic = novice.open(self.sample_path) + rest = pic.width - cut + temp = pic[:cut, :] + pic[:rest, :] = pic[cut:, :] + pic[rest:, :] = temp + + pic_orig = novice.open(self.sample_path) + + # Check center line + half_height = int(pic.height/2) + for p1 in pic_orig[rest:, half_height]: + for p2 in pic[:cut, half_height]: + assert p1.rgb == p2.rgb + + for p1 in pic_orig[:cut, half_height]: + for p2 in pic[rest:, half_height]: + assert p1.rgb == p2.rgb