HexカラーをANSIエスケープコードに変換する
#FF5733のようなCSS 16進カラー値をターミナル出力用のANSIエスケープシーケンスに変換。トゥルーカラー(24ビット)と最も近い256色近似法をカバー。
True Color
詳細な説明
HexカラーのANSIへの変換
Web開発者はターミナル出力で16進カラーを再現する必要が頻繁にあります。このガイドでは、16進カラーをトゥルーカラー(24ビット)と256色ANSIエスケープシーケンスの両方に変換する方法をカバーします。
Hexからトゥルーカラーへ
変換は簡単です — 16進数をRGBコンポーネントにパースします:
def hex_to_ansi_truecolor(hex_color, is_bg=False):
hex_color = hex_color.lstrip('#')
r = int(hex_color[0:2], 16)
g = int(hex_color[2:4], 16)
b = int(hex_color[4:6], 16)
prefix = 48 if is_bg else 38
return f"\033[{prefix};2;{r};{g};{b}m"
Hexから最も近い256色へ
トゥルーカラーをサポートしていないターミナル向け:
def hex_to_ansi256(hex_color):
hex_color = hex_color.lstrip('#')
r = int(hex_color[0:2], 16)
g = int(hex_color[2:4], 16)
b = int(hex_color[4:6], 16)
# グレースケールを確認
if r == g == b:
if r < 4: return 16
if r > 248: return 231
return round((r - 8) / 10) + 232
# 6x6x6キューブにマッピング
values = [0, 95, 135, 175, 215, 255]
ri = min(range(6), key=lambda i: abs(values[i] - r))
gi = min(range(6), key=lambda i: abs(values[i] - g))
bi = min(range(6), key=lambda i: abs(values[i] - b))
return 16 + (36 * ri) + (6 * gi) + bi
人気のHexカラーとANSI対応
| Hex | 名前 | トゥルーカラーコード | 最も近い256 |
|---|---|---|---|
#FF5733 |
バーントオレンジ | 38;2;255;87;51 |
202 |
#3498DB |
ドジャーブルー | 38;2;52;152;219 |
68 |
#2ECC71 |
エメラルド | 38;2;46;204;113 |
42 |
#E74C3C |
アリザリン | 38;2;231;76;60 |
196 |
#9B59B6 |
アメジスト | 38;2;155;89;182 |
133 |
#1ABC9C |
ターコイズ | 38;2;26;188;156 |
36 |
Node.js実装
function hexToAnsi(hex, isBg = false) {
const r = parseInt(hex.slice(1, 3), 16);
const g = parseInt(hex.slice(3, 5), 16);
const b = parseInt(hex.slice(5, 7), 16);
const prefix = isBg ? 48 : 38;
return `\x1b[${prefix};2;${r};${g};${b}m`;
}
// 使用例
const red = hexToAnsi('#FF5733');
console.log(`${red}Hello World\x1b[0m`);
Webとターミナルの両方のコンテキストでアプリケーションのブランドカラーを一貫して使用することが容易になります。
ユースケース
Hexの ANSIへの変換は、企業のブランドカラーに合わせたCLIツールの構築、Webカラーパレットからターミナルテーマの作成、またはWebとターミナルの両方にまたがるデザインシステムの実装に不可欠です。Tailwind CSSのカラーパレットをターミナルカラーに直接変換して、一貫した開発者体験を実現できます。