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のカラーパレットをターミナルカラーに直接変換して、一貫した開発者体験を実現できます。

試してみる — ANSI Color Code Reference

フルツールを開く