2 个不稳定版本
使用旧 Rust 2015
0.2.0 | 2016年9月4日 |
---|---|
0.1.0 | 2016年9月4日 |
#796 in 图像
319 每月下载量
在 8 crate 中使用
50KB
999 行
Exoquant 0.1.0
Exoquant 是一个用 Rust 编写的非常高质量的图像量化库,具有基本颜色量化、K-Means 调色板优化和重映射以及 Floyd-Steinberg 和有序抖动器的抖动功能。
此库版本的代码是对 2004 年编写的一个同名 C 库的改进重写。
用法
将 exoquant 添加到您的 Cargo.toml 作为依赖项
[dependencies]
exoquant = "0.2.0"
基本 API
对于简单用例,有一个方便的函数,它只需输入真彩色图像数据和几个选项,即可返回调色板和索引图像数据作为输出
use exoquant::*;
let image = testdata::test_image();
let (palette, indexed_data) = convert_to_indexed(&image.pixels, image.width, 256,
&optimizer::KMeans, &ditherer::FloydSteinberg::new());
低级 API
低级 API 允许您完全控制量化工作流程。它允许使用以下用例
- 仅创建调色板并在自己的自定义代码中进行重映射
- 将图像重映射到现有调色板或使用不同库创建的调色板
- 为多个输入图像(或,例如,GIF 的帧)生成单个调色板
- 实现您自己的自定义抖动器(也可以与基本 API 一起使用)
使用低级 API 对图像进行量化的示例如下
use exoquant::*;
use exoquant::optimizer::Optimizer;
let image = testdata::test_image();
let histogram = image.pixels.iter().cloned().collect();
let colorspace = SimpleColorSpace::default();
let optimizer = optimizer::KMeans;
let mut quantizer = Quantizer::new(&histogram, &colorspace);
while quantizer.num_colors() < 256 {
quantizer.step();
// very optional optimization, !very slow!
// you probably only want to do this every N steps, if at all.
if quantizer.num_colors() % 64 == 0 {
quantizer = quantizer.optimize(&optimizer, 4);
}
}
let palette = quantizer.colors(&colorspace);
// this optimization is more useful than the above and a lot less slow
let palette = optimizer.optimize_palette(&colorspace, &palette, &histogram, 16);
let ditherer = ditherer::FloydSteinberg::new();
let remapper = Remapper::new(&palette, &colorspace, &ditherer);
let indexed_data = remapper.remap(&image.pixels, image.width);
API 文档
依赖项
~0–265KB