#gradient #generative-art #graphics #color #colormap #color-scales

colorgrad

数据可视化、图表、游戏、生成艺术等领域的颜色渐变库

9 个版本 (破坏性更新)

0.7.0 2024年8月6日
0.6.2 2022年10月14日
0.6.1 2022年7月22日
0.5.0 2021年9月3日
0.1.0 2020年12月23日

#20 in 图像

Download history 9309/week @ 2024-05-03 7117/week @ 2024-05-10 6561/week @ 2024-05-17 6501/week @ 2024-05-24 6311/week @ 2024-05-31 5721/week @ 2024-06-07 6293/week @ 2024-06-14 6376/week @ 2024-06-21 7501/week @ 2024-06-28 7973/week @ 2024-07-05 9463/week @ 2024-07-12 8088/week @ 2024-07-19 7115/week @ 2024-07-26 6457/week @ 2024-08-02 7555/week @ 2024-08-09 5722/week @ 2024-08-16

28,068 每月下载量
47 个crate中 使用 (直接使用31个)

MIT/Apache

71KB
1.5K SLoC

colorgrad 🦀

Stars License crates.io Documentation Build Status Total Downloads

Rust 颜色渐变库,用于数据可视化、图表、游戏、地图、生成艺术等。

文档更新日志捐赠


目录

使用方法

将此内容添加到您的 Cargo.toml

colorgrad = "0.7.0"

自定义渐变

基本

let g = colorgrad::GradientBuilder::new().build::<colorgrad::LinearGradient>()?;

img

自定义颜色

use colorgrad::Color;

let g = colorgrad::GradientBuilder::new()
    .colors(&[
        Color::from_rgba8(0, 206, 209, 255),
        Color::from_rgba8(255, 105, 180, 255),
        Color::new(0.274, 0.5, 0.7, 1.0),
        Color::from_hsva(50.0, 1.0, 1.0, 1.0),
        Color::from_hsva(348.0, 0.9, 0.8, 1.0),
    ])
    .build::<colorgrad::LinearGradient>()?;

img

使用Web颜色格式

.html_colors() 方法接受 命名颜色、十六进制 (#rgb#rgba#rrggbb#rrggbbaa)、rgb()rgba()hsl()hsla()hwb()、和 hsv()

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["#C41189", "#00BFFF", "#FFD700"])
    .build::<colorgrad::LinearGradient>()?;

img

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["gold", "hotpink", "darkturquoise"])
    .build::<colorgrad::LinearGradient>()?;

img

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["rgb(125,110,221)", "rgb(90%,45%,97%)", "hsl(229,79%,85%)"])
    .build::<colorgrad::LinearGradient>()?;

img

使用CSS渐变格式

let g = colorgrad::GradientBuilder::new()
    .css("blue, cyan, gold, purple 70%, tomato 70%, 90%, #ff0")
    .build::<colorgrad::CatmullRomGradient>()?;

img

域 & 颜色位置

默认域为 [0..1]。

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["deeppink", "gold", "seagreen"])
    .build::<colorgrad::LinearGradient>()?;

assert_eq!(g.domain(), (0.0, 1.0));

img

将域设置为 [0..100]。

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["deeppink", "gold", "seagreen"])
    .domain(&[0.0, 100.0])
    .build::<colorgrad::LinearGradient>()?;

assert_eq!(g.domain(), (0.0, 100.0));

img

将域设置为 [-1..1]。

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["deeppink", "gold", "seagreen"])
    .domain(&[-1.0, 1.0])
    .build::<colorgrad::LinearGradient>()?;

assert_eq!(g.domain(), (-1.0, 1.0));

img

为每个颜色设置确切位置。域为 [0..1]。

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["deeppink", "gold", "seagreen"])
    .domain(&[0.0, 0.7, 1.0])
    .build::<colorgrad::LinearGradient>()?;

assert_eq!(g.domain(), (0.0, 1.0));

img

为每个颜色设置确切位置。域为 [15..80]。

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["deeppink", "gold", "seagreen"])
    .domain(&[15.0, 30.0, 80.0])
    .build::<colorgrad::LinearGradient>()?;

assert_eq!(g.domain(), (15.0, 80.0));

img

混合模式

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["#FFF", "#00F"])
    .mode(colorgrad::BlendMode::Rgb)
    .build::<colorgrad::LinearGradient>()?;

Blending Modes

插值模式

let g = colorgrad::GradientBuilder::new()
    .html_colors(&["#C41189", "#00BFFF", "#FFD700"])
    .build::<colorgrad::BasisGradient>()?;

Interpolation Modes

预设渐变

PRESET.md

解析GIMP渐变

use colorgrad::{Color, GimpGradient};
use std::fs::File;
use std::io::BufReader;

let input = File::open("examples/Abstract_1.ggr")?;
let buf = BufReader::new(input);
let col = Color::default();
let grad = GimpGradient::new(buf, &col, &col)?;

assert_eq!(grad.name(), "Abstract 1");

img

使用渐变

获取域

let grad = colorgrad::preset::rainbow();

assert_eq!(grad.domain(), (0.0, 1.0));

获取特定位置的单色

use colorgrad::Gradient;

let grad = colorgrad::preset::blues();

assert_eq!(grad.at(0.0).to_rgba8(), [247, 251, 255, 255]);
assert_eq!(grad.at(0.5).to_rgba8(), [109, 174, 213, 255]);
assert_eq!(grad.at(1.0).to_rgba8(), [8,   48,  107, 255]);

assert_eq!(grad.at(0.3).to_rgba8(), grad.repeat_at(0.3).to_rgba8());
assert_eq!(grad.at(0.3).to_rgba8(), grad.reflect_at(0.3).to_rgba8());

assert_eq!(grad.at(0.7).to_rgba8(), grad.repeat_at(0.7).to_rgba8());
assert_eq!(grad.at(0.7).to_rgba8(), grad.reflect_at(0.7).to_rgba8());

at()repeat_at()reflect_at() 的差异。

Spread Modes

获取在渐变中均匀分布的 n 种颜色

use colorgrad::Gradient;

let grad = colorgrad::preset::rainbow();

for c in grad.colors(10) {
    println!("{}", c.to_hex_string());
}

输出

#6e40aa
#c83dac
#ff5375
#ff8c38
#c9d33a
#7cf659
#5dea8d
#48b8d0
#4775de
#6e40aa

硬边渐变

将渐变转换为具有 11 个段和 0 平滑度的硬边渐变。

let g = colorgrad::preset::rainbow().sharp(11, 0.0);

img

这是不同平滑度的影响。

img

示例

渐变图像

use colorgrad::Gradient;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let width = 1300.0;
    let height = 70.0;

    // custom gradient
    let grad = colorgrad::GradientBuilder::new()
        .html_colors(&["deeppink", "gold", "seagreen"])
        .build::<colorgrad::CatmullRomGradient>()?;

    let imgbuf = image::ImageBuffer::from_fn(width as u32, height as u32, |x, _| {
        image::Rgba(grad.at(x as f32 / width).to_rgba8())
    });
    imgbuf.save("gradient.png")?;

    Ok(())
}

示例输出

img

彩色噪声

use colorgrad::Gradient;
use noise::NoiseFn;

fn main() {
    let scale = 0.015;

    let grad = colorgrad::preset::rainbow().sharp(5, 0.15);
    let ns = noise::OpenSimplex::new(0);

    let imgbuf = image::ImageBuffer::from_fn(600, 350, |x, y| {
        let t = ns.get([x as f64 * scale, y as f64 * scale]);
        image::Rgba(grad.at(norm(t as f32, -0.5, 0.5)).to_rgba8())
    });
    imgbuf.save("noise.png").unwrap();
}

fn norm(t: f32, a: f32, b: f32) -> f32 {
    (t - a) * (1.0 / (b - a))
}

示例输出

img

特性

默认

  • named-colors:启用从 命名颜色 解析。需要 phf
  • preset:预设渐变。

可以使用 default-features = false 禁用。

可选

  • lab:在 Lab 颜色空间中混合颜色。
  • ggr:解析 GIMP 渐变格式。

类似项目

使用 colorgrad 的项目

  • binocle - 用于可视化二进制数据的图形工具
  • bytehound - Linux 的内存分析器
  • cosmic-bg - 应用背景到显示的 COSMIC 会话服务
  • eruption - Linux 用户模式输入和 LED 驱动程序,用于键盘、鼠标和其他设备
  • gradient - 用于玩转颜色渐变的命令行工具
  • lcat - lolcat 克隆
  • lolcrab - 添加噪声的 lolcatlcat 分支)
  • rust-fractal - Mandelbrot 分形可视化器
  • WezTerm - 一个 GPU 加速的跨平台终端模拟器和多路复用器
  • 以及其他许多...

依赖项

~240KB