#调色板 #色彩 #色彩空间 #图像 #颜色 #加载图像 #颜色提取

auto-palette

🎨 一个自动从图像中提取突出色彩调板的 Rust 库

6 个版本 (重大更新)

新版本 0.5.0 2024 年 8 月 13 日
0.4.0 2024 年 6 月 7 日
0.3.0 2024 年 5 月 19 日
0.2.0 2024 年 5 月 9 日
0.1.1 2024 年 4 月 30 日

#210 in 图像

Download history 303/week @ 2024-04-28 146/week @ 2024-05-05 11/week @ 2024-05-12 197/week @ 2024-05-19 14/week @ 2024-05-26 121/week @ 2024-06-02 27/week @ 2024-06-09 7/week @ 2024-06-16 17/week @ 2024-06-23 34/week @ 2024-06-30 28/week @ 2024-07-07 1/week @ 2024-07-14 129/week @ 2024-08-11

每月下载 129
用于 2 crate

MIT 许可证

225KB
5.5K SLoC

auto-palette

🎨 一个用于自动从图像中提取突出色彩调板的 Rust 库。

Build License Version Codacy grade Codecov

特性

Hot air balloon on blue sky Extracted Color Palette

[!NOTE] 图片由 Laura ClugstonUnsplash 提供

  • 自动从图像中提取突出色彩调板。
  • 提供关于颜色、位置和数量的详细信息。
  • 支持多种提取算法,包括 DBSCANDBSCAN++KMeans++
  • 支持多种色彩空间,包括 RGBHSLLAB
  • 支持基于多种主题选择突出颜色,包括 VividMutedLightDark

安装

在 Rust 项目中使用 auto-palette,将其添加到您的 Cargo.toml 文件中。

[dependencies]
auto-palette = "0.5.0"

用法

以下是一个基本示例,演示了如何提取调板并找到突出颜色。更多示例请参阅 示例目录

use auto_palette::{ImageData, Palette};

fn main() {
  // Load the image data from the file
  let image_data = ImageData::load("../../gfx/holly-booth-hLZWGXy5akM-unsplash.jpg").unwrap();

  // Extract the color palette from the image data
  let palette: Palette<f64> = Palette::extract(&image_data).unwrap();
  println!("Extracted {} swatches", palette.len());

  // Find the 5 prominent colors in the palette and print their information
  let swatches = palette.find_swatches(5);
  for swatch in swatches {
    println!("Color: {}", swatch.color().to_hex_string());
    println!("Position: {:?}", swatch.position());
    println!("Population: {}", swatch.population());
  }
}

API

有关 API 的更多信息,请参阅 文档

ImageData

ImageData 结构体表示用于提取色彩调板的图像数据。

ImageData::load

从文件中加载图像数据。
支持的图像格式包括 PNGJPEGGIFBMPTIFFWEBP
此方法需要启用 image 功能。默认情况下,image 功能已启用。

// Load the image data from the file
let image_data = ImageData::load("path/to/image.jpg").unwrap();

ImageData::新版本

从原始图像数据创建一个新的实例。
每个像素由四个连续的字节表示,顺序为 RGBA

// Create a new instance from the raw image data
let pixels = [
  255, 0, 0, 255,   // Red
  0, 255, 0, 255,   // Green
  0, 0, 255, 255,   // Blue
  255, 255, 0, 255, // Yellow
];
let image_data = ImageData::new(2, 2, &pixels).unwrap();

Palette

Palette 结构体表示从 ImageData 中提取的颜色调色板。

Palette::extract

从给定的 ImageData 中提取颜色调色板。此方法用于使用默认的 Algorithm(DBSCAN)提取颜色调色板。

// Load the image data from the file
let image_data = ImageData::load("path/to/image.jpg").unwrap();

// Extract the color palette from the image data
let palette: Palette<f64> = Palette::extract(&image_data).unwrap();

Palette::extract_with_algorithm

使用指定的 Algorithm 从给定的 ImageData 中提取颜色调色板。支持以下算法:DBSCANDBSCAN++KMeans++

// Load the image data from the file
let image_data = ImageData::load("path/to/image.jpg").unwrap();
// Extract the color palette from the image data with the specified algorithm
let palette: Palette<f64> = Palette::extract_with_algorithm(&image_data, Algorithm::DBSCAN).unwrap();

Palette::find_swatches

根据色卡数量查找调色板中的突出颜色。
返回的色卡按其数量降序排序。

// Find the 5 prominent colors in the palette
let swatches = palette.find_swatches(5);

Palette::find_swatches_with_theme

根据指定的 Theme 和色卡数量查找调色板中的突出颜色。支持的主题有 BasicColorfulVividMutedLightDark

// Find the 5 prominent colors in the palette with the specified theme
let swatches = palette.find_swatches_with_theme(5, Theme::Light);

Swatch

Swatch 结构体表示 Palette 中的颜色色卡。
它包含有关颜色、位置、数量和比率的详细信息。

// Find the 5 prominent colors in the palette
let swatches = palette.find_swatches(5);

for swatch in swatches {
    // Get the color, position, and population of the swatch
    println!("Color: {:?}", swatch.color());
    println!("Position: {:?}", swatch.position());
    println!("Population: {}", swatch.population());
    println!("Ratio: {}", swatch.ratio());
}

[!TIP] Color 结构体提供了将颜色转换为不同格式的方法,例如 RGBHSLCIE L*a*b*

let color = swatch.color();
println!("Hex: {}", color.to_hex_string());
println!("RGB: {:?}", color.to_rgb());
println!("HSL: {:?}", color.to_hsl());
println!("CIE L*a*b*: {:?}", color.to_lab());
println!("Oklch: {:?}", color.to_oklch());

开发

按照以下说明构建和测试项目

  1. 分叉并克隆仓库。
  2. 为您的功能或错误修复创建一个新的分支。
  3. 进行更改并编写测试。
  4. 使用 cargo test --lib 测试您的更改。
  5. 使用 cargo +nightly fmttaplo fmt 格式化代码。
  6. 创建一个拉取请求。

许可

本项目根据 MIT 许可证分发。有关详细信息,请参阅 LICENSE 文件。

FOSSA Status

依赖项

~5.5MB
~106K SLoC