Skip to content

Instantly share code, notes, and snippets.

@donatj
Created April 4, 2013 20:17
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save donatj/5313996 to your computer and use it in GitHub Desktop.
Save donatj/5313996 to your computer and use it in GitHub Desktop.
Nearest Terminal Color Calculator
<?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