php function problem with color
I have made a function that returns the color based on the RGB color (used @ the param)
But now i have a problem with this color (100,76,66). This is a brown color but the function returns Dark Olive Green.
Is there a mistake in my function ?
Example:
$str_color = getColorNameByRgbColors('100,76,66'); echo $str_color;
function getColorNameByRgbColors($str_comma_sep_rbg) { /* php function colorname problem */
$arr_input = explode(',', $str_comma_sep_rbg);
// Dark Olive Green
// based on --> http://www.w3.org/TR/SVG/types.html#ColorKeywords
$arr_colors = array(
'Alice Blue' => array(240, 248, 255),
'Antique White' => array(250, 235, 215),
'aqua' => array(0, 255, 255), // ***
'Aquamarine' => array(127, 255, 212),
'Azure' => array(240, 255, 255),
'Beige' => array(245, 245, 220),
'Bisque' => array(255, 228, 196),
'Black' => array(0, 0, 0),
'Blanched Almond' => array(255, 235, 205),
'Blue' => array(0, 0, 255),
'Blue Violet' => array(138, 43, 226),
'Brown' => array(165, 42, 42),
'Burlywood' => array(222, 184, 135),
'Cadet Blue' => array(95, 158, 160),
'Chartreuse' => array(127, 255, 0),
'Chocolate' => array(210, 105, 30),
'Coral' => array(255, 127, 80),
'Cornflower Blue' => array(100, 149, 237),
'Cornsilk' => array(255, 248, 220),
'crimson' => array(220, 20, 60), // ***
'Cyan' => array(0, 255, 255),
'Dark blue' => array(0, 0, 139),
'Dark Cyan' => array(0, 139, 139),
'Dark Goldenrod' => array(184, 134, 11),
'Dark Green' => array(0, 100, 0),
'Dark Grey' => array(169, 169, 169),
'Dark Khaki' => array(189, 183, 107),
'Dark Magenta' => array(139, 0, 139),
'Dark Olive Green' => array(85, 107, 47),
'Dark Orange' => array(255, 140, 0),
'Dark Orchid' => array(153, 50, 204),
'Dark Red' => array(139, 0, 0),
'Dark Salmon' => array(233, 150, 122),
'Dark Sea Green' => array(143, 188, 143),
'Dark Slate Blue' => array(72, 61, 139),
'Dark Slate Gray' => array(47, 79, 79),
'Dark Turquoise' => array(0, 206, 209),
'Dark Violet' => array(148, 0, 211),
'Deep Pink' => array(255, 20, 147),
'Deep Sky Blue' => array(0, 191, 255),
'Dim Gray' => array(105, 105, 105),
'Dodger Blue' => array(30, 144, 255),
'Firebrick' => array(178, 34, 34),
'Floral White' => array(255, 250, 240),
'Forest Green' => array(34, 139, 34),
'fuchsia' => array(255, 0, 255), // ****
'Gainsboro' => array(220, 220, 220),
'Ghost White' => array(248, 248, 255),
'Gold' => array(255, 215, 0),
'Goldenrod' => array(218, 165, 32),
'Grey' => array(128, 128, 128),
'Green' => array(0, 128, 0),
'Green Yellow' => array(173, 255, 47),
'Honeydew' => array(240, 255, 240),
'Hot Pink' => array(255, 105, 180),
'Indian Red' => array(205, 92, 92),
'Indigo' => array(75, 0, 130),
'Ivory' => array(255, 255, 240),
'Khaki' => array(240, 230, 140),
'Lavender' => array(230, 230, 250),
'Lavender Blush' => array(255, 240, 245),
'Lawn Green' => array(124, 252, 0),
'Lemon Chiffon' => array(255, 250, 205),
'Light Blue' => array(173, 216, 230),
'Light Coral' => array(240, 128, 128),
'Light Cyan' => array(224, 255, 255),
'Light Goldenrod Yellow'=> array(250, 250, 210),
'Light Gray' => array(211, 211, 211),
'Light Green' => array(144, 238, 144),
'Light Pink' => array(255, 182, 193),
'Light Salmon' => array(255, 160, 122),
'Light Sea Green' => array(32, 178, 170),
'Light Sky Blue' => array(135, 206, 250),
'Light Slate Gray' => array(119, 136, 153),
'Light Steel Blue' => array(176, 196, 222),
'Light Yellow' => array(255, 255, 224),
'Lime' => array(0, 255, 0),
'Lime Green' => array(50, 205, 50),
'Linen' => array(250, 240, 230),
'magenta' => array(255, 0, 255), // ****d
'Maroon' => array(128, 0, 0),
'Medium Aquamarine' => array(102, 205, 170),
'Medium Blue' => array(0, 0, 205),
'Medium Orchid' => array(186, 85, 211),
'开发者_开发知识库Medium Purple' => array(147, 112, 219),
'Medium Sea Green' => array(60, 179, 113),
'Medium Slate Blue' => array(123, 104, 238),
'Medium Spring Green' => array(0, 250, 154),
'Medium Turquoise' => array(72, 209, 204),
'Medium Violet Red' => array(199, 21, 133),
'Midnight Blue' => array(25, 25, 112),
'Mint Cream' => array(245, 255, 250),
'Misty Rose' => array(255, 228, 225),
'Moccasin' => array(255, 228, 181),
'Navajo White' => array(255, 222, 173),
'Navy' => array(0, 0, 128),
'Old Lace' => array(253, 245, 230),
'olive' => array(128, 128, 0), // ****
'Olive Drab' => array(107, 142, 35),
'Orange' => array(255, 165, 0),
'Orange Red' => array(255, 69, 0),
'Orchid' => array(218, 112, 214),
'Pale Goldenrod' => array(238, 232, 170),
'Pale Green' => array(152, 251, 152),
'Pale Turquoise' => array(175, 238, 238),
'Pale Violet Red' => array(219, 112, 147),
'Papaya Whip' => array(255, 239, 213),
'Peach Puff' => array(255, 218, 185),
'Peru' => array(205, 133, 63),
'Pink' => array(255, 192, 203),
'Plum' => array(221, 160, 221),
'Powder Blue' => array(176, 224, 230),
'Purple' => array(128, 0, 128),
'Red' => array(255, 0, 0),
'Rosy Brown' => array(188, 143, 143),
'Royal Blue' => array(65, 105, 225),
'Saddle Brown' => array(139, 69, 19),
'Salmon' => array(250, 128, 114),
'Sandy Brown' => array(244, 164, 96),
'Sea Green' => array(46, 139, 87),
'Seashell' => array(255, 245, 238),
'Sienna' => array(160, 82, 45),
'Silver' => array(192, 192, 192),
'Sky Blue' => array(135, 206, 235),
'Slate Blue' => array(106, 90, 205),
'Slate Gray' => array(112, 128, 144),
'Snow' => array(255, 250, 250),
'Spring Green' => array(0, 255, 127),
'Steel Blue' => array(70, 130, 180),
'Tan' => array(210, 180, 140),
'teal' => array(0, 128, 128),
'Thistle' => array(216, 191, 216),
'Tomato' => array(255, 99, 71),
'Turquoise' => array(64, 224, 208),
'Violet' => array(238, 130, 238),
'Wheat' => array(245, 222, 179),
'White' => array(255, 255, 255),
'White Smoke' => array(245, 245, 245),
'Yellow' => array(255, 255, 0),
'Yellow Green' => array(154, 205, 50)
);
foreach($arr_colors as $key=>$color) {
// $diff = abs($arr_input[0] - $color[0]) + abs($arr_input[1] - $color[1]) + abs($arr_input[2] - $color[2]);
// Your code looks right, I ran it and got silver. However, I also tried squaring the differences in the components and got (what I thought was) an even better answer: lichtsteelblue. Here's the code I used:
$diff = pow($arr_input[0] - $color[0],2) + pow($arr_input[1] - $color[1], 2) + pow($arr_input[2] - $color[2], 2);
$array[$key] = $diff;
}
asort($array);
reset($array);
list($key, $diff) = each($array);
return $key;
}
Where is the Brown colour with the code (100,76,66). Also you dont have and return false statements if the search is unsuccessfull
Issue is assumption that
pow($arr_input[0] - $color[0],2) + pow($arr_input[1] - $color[1], 2) + pow($arr_input[2] - $color[2], 2) lesser
=> colors is more like
精彩评论