11个稳定版本

1.2.3 2024年7月18日
1.2.2 2023年7月15日
1.2.1 2022年12月17日
1.1.1 2022年2月4日
1.0.1 2018年9月21日

#33命令行界面

Download history 22272/week @ 2024-05-04 27618/week @ 2024-05-11 27848/week @ 2024-05-18 24790/week @ 2024-05-25 27472/week @ 2024-06-01 26077/week @ 2024-06-08 23802/week @ 2024-06-15 21296/week @ 2024-06-22 20187/week @ 2024-06-29 21910/week @ 2024-07-06 23307/week @ 2024-07-13 23875/week @ 2024-07-20 21813/week @ 2024-07-27 27391/week @ 2024-08-03 25589/week @ 2024-08-10 21540/week @ 2024-08-17

99,994 每月下载量
用于 128 个crates(直接使用26个)

LGPL-3.0或更高版

65KB
696

真彩色 ↔ ANSI终端调色板转换器

crates.io Docs License

ansi_colours 将24位sRGB颜色与ANSI终端(如xterm或rxvt-unicode在256色模式下)使用的8位颜色调色板之间进行转换。最常见的用例是在仅支持8位颜色调色板的终端模拟器中使用24位颜色。它允许终端通过其支持的值来近似真彩色。

在将真彩色映射到可用的256色调色板时,它会尝试在准确性和性能之间取得平衡。它不实现最快的算法,也不是最准确的,而是使用一个应该足够快且足够准确的公式,适用于大多数用例。

用法

该算法有C和Rust实现,可以轻松地从C、C++或Rust中使用。两种实现是等效的,并提供了最佳性能。自1.0.4版本以来,Rust crate在执行真彩色→ANSI索引转换时速度提高了25%,在执行反向转换时提高了75%。

Rust

在Cargo项目中使用此包就像添加一个依赖项一样简单

[dependencies]
ansi_colours = "1.2"

然后使用库提供的函数之一

use ansi_colours::*;

fn main() {
    // Colour at given index:
    println!("{:-3}: {:?}", 50, rgb_from_ansi256(50));

    // Approximate true-colour by colour in the palette:
    let rgb = (100, 200, 150);
    let index = ansi256_from_rgb(rgb);
    println!("{:?} ~ {:-3} {:?}", rgb, index, rgb_from_ansi256(index));
}

为了提高互操作性,该包定义了rgb(默认启用)、ansi_termanstyletermcolor cargo功能,这些功能为具有相同名称的crates添加了支持。

C和C++

在C或C++中使用此库的最简单方法是复制ansi_colour.hansi256.c文件到您的项目中,设置对ansi256.c文件的编译步骤,将头文件添加到包含路径中,然后使用提供的两个函数

#include <stdio.h>

#include "ansi_colours.h"

int main() {
    // Colour at given index:
    printf("%-3u #%06x\n",  50, rgb_from_ansi256(50));

    // Approximate true-colour by colour in the palette:
    uint32_t rgb = 0x64C896;
    uint8_t index = ansi256_from_rgb(rgb);
    printf("#%06x ~ %-3u %06x\n", rgb, index, rgb_from_ansi256(index));

    return 0;
}

不幸的是,C和C++生态系统没有一个集中的包分发服务,因此目前没有更方便的解决方案。

依赖关系

~0.1–7MB
~38K SLoC