Created
April 4, 2013 20:17
-
-
Save donatj/5313996 to your computer and use it in GitHub Desktop.
Nearest Terminal Color Calculator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| $CLUT = array( | |
| '00' => array( 0, 0, 0 ), '01' => array( 128, 0, 0 ), | |
| '02' => array( 0, 128, 0 ), '03' => array( 128, 128, 0 ), | |
| '04' => array( 0, 0, 128 ), '05' => array( 128, 0, 128 ), | |
| '06' => array( 0, 128, 128 ), '07' => array( 192, 192, 192 ), | |
| '08' => array( 128, 128, 128 ), '09' => array( 255, 0, 0 ), | |
| '10' => array( 0, 255, 0 ), '11' => array( 255, 255, 0 ), | |
| '12' => array( 0, 0, 255 ), '13' => array( 255, 0, 255 ), | |
| '14' => array( 0, 255, 255 ), '15' => array( 255, 255, 255 ), | |
| '17' => array( 0, 0, 95 ), '18' => array( 0, 0, 135 ), | |
| '19' => array( 0, 0, 175 ), '20' => array( 0, 0, 215 ), | |
| '22' => array( 0, 95, 0 ), '23' => array( 0, 95, 95 ), | |
| '24' => array( 0, 95, 135 ), '25' => array( 0, 95, 175 ), | |
| '26' => array( 0, 95, 215 ), '27' => array( 0, 95, 255 ), | |
| '28' => array( 0, 135, 0 ), '29' => array( 0, 135, 95 ), | |
| '30' => array( 0, 135, 135 ), '31' => array( 0, 135, 175 ), | |
| '32' => array( 0, 135, 215 ), '33' => array( 0, 135, 255 ), | |
| '34' => array( 0, 175, 0 ), '35' => array( 0, 175, 95 ), | |
| '36' => array( 0, 175, 135 ), '37' => array( 0, 175, 175 ), | |
| '38' => array( 0, 175, 215 ), '39' => array( 0, 175, 255 ), | |
| '40' => array( 0, 215, 0 ), '41' => array( 0, 215, 95 ), | |
| '42' => array( 0, 215, 135 ), '43' => array( 0, 215, 175 ), | |
| '44' => array( 0, 215, 215 ), '45' => array( 0, 215, 255 ), | |
| '47' => array( 0, 255, 95 ), '48' => array( 0, 255, 135 ), | |
| '49' => array( 0, 255, 175 ), '50' => array( 0, 255, 215 ), | |
| '52' => array( 95, 0, 0 ), '53' => array( 95, 0, 95 ), | |
| '54' => array( 95, 0, 135 ), '55' => array( 95, 0, 175 ), | |
| '56' => array( 95, 0, 215 ), '57' => array( 95, 0, 255 ), | |
| '58' => array( 95, 95, 0 ), '59' => array( 95, 95, 95 ), | |
| '60' => array( 95, 95, 135 ), '61' => array( 95, 95, 175 ), | |
| '62' => array( 95, 95, 215 ), '63' => array( 95, 95, 255 ), | |
| '64' => array( 95, 135, 0 ), '65' => array( 95, 135, 95 ), | |
| '66' => array( 95, 135, 135 ), '67' => array( 95, 135, 175 ), | |
| '68' => array( 95, 135, 215 ), '69' => array( 95, 135, 255 ), | |
| '70' => array( 95, 175, 0 ), '71' => array( 95, 175, 95 ), | |
| '72' => array( 95, 175, 135 ), '73' => array( 95, 175, 175 ), | |
| '74' => array( 95, 175, 215 ), '75' => array( 95, 175, 255 ), | |
| '76' => array( 95, 215, 0 ), '77' => array( 95, 215, 95 ), | |
| '78' => array( 95, 215, 135 ), '79' => array( 95, 215, 175 ), | |
| '80' => array( 95, 215, 215 ), '81' => array( 95, 215, 255 ), | |
| '82' => array( 95, 255, 0 ), '83' => array( 95, 255, 95 ), | |
| '84' => array( 95, 255, 135 ), '85' => array( 95, 255, 175 ), | |
| '86' => array( 95, 255, 215 ), '87' => array( 95, 255, 255 ), | |
| '88' => array( 135, 0, 0 ), '89' => array( 135, 0, 95 ), | |
| '90' => array( 135, 0, 135 ), '91' => array( 135, 0, 175 ), | |
| '92' => array( 135, 0, 215 ), '93' => array( 135, 0, 255 ), | |
| '94' => array( 135, 95, 0 ), '95' => array( 135, 95, 95 ), | |
| '96' => array( 135, 95, 135 ), '97' => array( 135, 95, 175 ), | |
| '98' => array( 135, 95, 215 ), '99' => array( 135, 95, 255 ), | |
| '100' => array( 135, 135, 0 ), '101' => array( 135, 135, 95 ), | |
| '102' => array( 135, 135, 135 ), '103' => array( 135, 135, 175 ), | |
| '104' => array( 135, 135, 215 ), '105' => array( 135, 135, 255 ), | |
| '106' => array( 135, 175, 0 ), '107' => array( 135, 175, 95 ), | |
| '108' => array( 135, 175, 135 ), '109' => array( 135, 175, 175 ), | |
| '110' => array( 135, 175, 215 ), '111' => array( 135, 175, 255 ), | |
| '112' => array( 135, 215, 0 ), '113' => array( 135, 215, 95 ), | |
| '114' => array( 135, 215, 135 ), '115' => array( 135, 215, 175 ), | |
| '116' => array( 135, 215, 215 ), '117' => array( 135, 215, 255 ), | |
| '118' => array( 135, 255, 0 ), '119' => array( 135, 255, 95 ), | |
| '120' => array( 135, 255, 135 ), '121' => array( 135, 255, 175 ), | |
| '122' => array( 135, 255, 215 ), '123' => array( 135, 255, 255 ), | |
| '124' => array( 175, 0, 0 ), '125' => array( 175, 0, 95 ), | |
| '126' => array( 175, 0, 135 ), '127' => array( 175, 0, 175 ), | |
| '128' => array( 175, 0, 215 ), '129' => array( 175, 0, 255 ), | |
| '130' => array( 175, 95, 0 ), '131' => array( 175, 95, 95 ), | |
| '132' => array( 175, 95, 135 ), '133' => array( 175, 95, 175 ), | |
| '134' => array( 175, 95, 215 ), '135' => array( 175, 95, 255 ), | |
| '136' => array( 175, 135, 0 ), '137' => array( 175, 135, 95 ), | |
| '138' => array( 175, 135, 135 ), '139' => array( 175, 135, 175 ), | |
| '140' => array( 175, 135, 215 ), '141' => array( 175, 135, 255 ), | |
| '142' => array( 175, 175, 0 ), '143' => array( 175, 175, 95 ), | |
| '144' => array( 175, 175, 135 ), '145' => array( 175, 175, 175 ), | |
| '146' => array( 175, 175, 215 ), '147' => array( 175, 175, 255 ), | |
| '148' => array( 175, 215, 0 ), '149' => array( 175, 215, 95 ), | |
| '150' => array( 175, 215, 135 ), '151' => array( 175, 215, 175 ), | |
| '152' => array( 175, 215, 215 ), '153' => array( 175, 215, 255 ), | |
| '154' => array( 175, 255, 0 ), '155' => array( 175, 255, 95 ), | |
| '156' => array( 175, 255, 135 ), '157' => array( 175, 255, 175 ), | |
| '158' => array( 175, 255, 215 ), '159' => array( 175, 255, 255 ), | |
| '160' => array( 215, 0, 0 ), '161' => array( 215, 0, 95 ), | |
| '162' => array( 215, 0, 135 ), '163' => array( 215, 0, 175 ), | |
| '164' => array( 215, 0, 215 ), '165' => array( 215, 0, 255 ), | |
| '166' => array( 215, 95, 0 ), '167' => array( 215, 95, 95 ), | |
| '168' => array( 215, 95, 135 ), '169' => array( 215, 95, 175 ), | |
| '170' => array( 215, 95, 215 ), '171' => array( 215, 95, 255 ), | |
| '172' => array( 215, 135, 0 ), '173' => array( 215, 135, 95 ), | |
| '174' => array( 215, 135, 135 ), '175' => array( 215, 135, 175 ), | |
| '176' => array( 215, 135, 215 ), '177' => array( 215, 135, 255 ), | |
| '178' => array( 215, 175, 0 ), '179' => array( 215, 175, 95 ), | |
| '180' => array( 215, 175, 135 ), '181' => array( 215, 175, 175 ), | |
| '182' => array( 215, 175, 215 ), '183' => array( 215, 175, 255 ), | |
| '184' => array( 215, 215, 0 ), '185' => array( 215, 215, 95 ), | |
| '186' => array( 215, 215, 135 ), '187' => array( 215, 215, 175 ), | |
| '188' => array( 215, 215, 215 ), '189' => array( 215, 215, 255 ), | |
| '190' => array( 215, 255, 0 ), '191' => array( 215, 255, 95 ), | |
| '192' => array( 215, 255, 135 ), '193' => array( 215, 255, 175 ), | |
| '194' => array( 215, 255, 215 ), '195' => array( 215, 255, 255 ), | |
| '197' => array( 255, 0, 95 ), '198' => array( 255, 0, 135 ), | |
| '199' => array( 255, 0, 175 ), '200' => array( 255, 0, 215 ), | |
| '202' => array( 255, 95, 0 ), '203' => array( 255, 95, 95 ), | |
| '204' => array( 255, 95, 135 ), '205' => array( 255, 95, 175 ), | |
| '206' => array( 255, 95, 215 ), '207' => array( 255, 95, 255 ), | |
| '208' => array( 255, 135, 0 ), '209' => array( 255, 135, 95 ), | |
| '210' => array( 255, 135, 135 ), '211' => array( 255, 135, 175 ), | |
| '212' => array( 255, 135, 215 ), '213' => array( 255, 135, 255 ), | |
| '214' => array( 255, 175, 0 ), '215' => array( 255, 175, 95 ), | |
| '216' => array( 255, 175, 135 ), '217' => array( 255, 175, 175 ), | |
| '218' => array( 255, 175, 215 ), '219' => array( 255, 175, 255 ), | |
| '220' => array( 255, 215, 0 ), '221' => array( 255, 215, 95 ), | |
| '222' => array( 255, 215, 135 ), '223' => array( 255, 215, 175 ), | |
| '224' => array( 255, 215, 215 ), '225' => array( 255, 215, 255 ), | |
| '227' => array( 255, 255, 95 ), '228' => array( 255, 255, 135 ), | |
| '229' => array( 255, 255, 175 ), '230' => array( 255, 255, 215 ), | |
| '232' => array( 8, 8, 8 ), '233' => array( 18, 18, 18 ), | |
| '234' => array( 28, 28, 28 ), '235' => array( 38, 38, 38 ), | |
| '236' => array( 48, 48, 48 ), '237' => array( 58, 58, 58 ), | |
| '238' => array( 68, 68, 68 ), '239' => array( 78, 78, 78 ), | |
| '240' => array( 88, 88, 88 ), '241' => array( 98, 98, 98 ), | |
| '242' => array( 108, 108, 108 ), '243' => array( 118, 118, 118 ), | |
| '245' => array( 138, 138, 138 ), '246' => array( 148, 148, 148 ), | |
| '247' => array( 158, 158, 158 ), '248' => array( 168, 168, 168 ), | |
| '249' => array( 178, 178, 178 ), '250' => array( 188, 188, 188 ), | |
| '251' => array( 198, 198, 198 ), '252' => array( 208, 208, 208 ), | |
| '253' => array( 218, 218, 218 ), '254' => array( 228, 228, 228 ), | |
| '255' => array( 238, 238, 238 ) | |
| ); | |
| function hex2rgb( $color ) { | |
| $color = ltrim($color, '#'); | |
| if ( strlen( $color ) == 6 ) { | |
| $rgb = str_split($color, 2); | |
| } elseif ( strlen( $color ) == 3 ) { | |
| $rgb = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] ); | |
| } else { | |
| return false; | |
| } | |
| return array_map('hexdec', $rgb); | |
| } | |
| function nearest_color($hex) { | |
| global $CLUT; | |
| $ecolor = hex2rgb($hex); | |
| $data = array_map(function($color)use($ecolor){ | |
| return intval(sqrt( | |
| pow( $color[0] - $ecolor[0], 2 ) + | |
| pow( $color[1] - $ecolor[1], 2 ) + | |
| pow( $color[2] - $ecolor[2], 2 ) | |
| )); | |
| }, $CLUT); | |
| $data = array_flip($data); | |
| ksort($data); | |
| return current($data); | |
| } | |
| function nearest_color2($hex) { | |
| global $CLUT; | |
| $ecolor = hex2rgb($hex); | |
| $data = array_map(function($color)use($ecolor){ | |
| return intval(( | |
| abs( $color[0] - $ecolor[0] ) + | |
| abs( $color[1] - $ecolor[1] ) + | |
| abs( $color[2] - $ecolor[2] ) | |
| )); | |
| }, $CLUT); | |
| $data = array_flip($data); | |
| ksort($data); | |
| return current($data); | |
| } | |
| function xdechex($int) { | |
| return str_pad(dechex($int), 2, "0", STR_PAD_LEFT); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment