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 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