#cie #color #cie-lab #interface #spectrum #observer #ciecam16

色度学

Rust 颜色建模库,具有 JavaScript/WASM 接口

3 个版本

0.0.2 2024 年 8 月 9 日
0.0.1 2024 年 8 月 9 日
0.0.0 2024 年 8 月 2 日

#264 in 算法

Download history 112/week @ 2024-07-29 197/week @ 2024-08-05 23/week @ 2024-08-12

332 每月下载量

MIT/Apache

120KB
1.5K SLoC

Rust 1K SLoC // 0.2% comments JavaScript 537 SLoC // 0.3% comments TypeScript 95 SLoC // 0.6% comments

概述

色度学库是一个用于照明和工程项目中颜色计算的库。它可以用于 Rust 项目,并提供 JavaScript/WebAssembly 接口。该库实现的算法试图遵循国际照明委员会、国际颜色联盟、照明工程学会等机构的建议。

以下是该库中主要对象的简要概述,以及一些用于 Rust、Deno/TypeScript 和 Web 应用的示例。有关详细文档,请参阅 Rust 的 crates.io 或 JavaScript 运行时应用的 jsr.io

Rust 应用中的使用

要在 Rust 应用中使用此库,请运行以下命令

   cargo add colorimetry

或将此行添加到您的 Cargo.toml 文件中的依赖项

    colorimetry = "0.0.1"

使用 Spectrum 用于光谱数据

该库中所有光谱计算都使用 Spectrum 类,该类包含光谱数据和光谱类型。出于实际考虑,它使用从 380 到 780 纳米的波长域,间隔为 1 纳米,如 CIE15:2004 中建议的那样。这导致与旧数据存在一些不一致,因为在过去,通常使用其他波长域进行积分。特别是,标准光源 D65、D50 和 A 的色度坐标与发布值略有不同。

以下示例使用 CIE 1931 标准观察者计算了 Planckian(基于热辐射的)光源(相关色温为 3000 开尔文)的照度和 CIE 1931 (x, y) 色度坐标。

use crate::colorimetry::{Spectrum, CIE1931};
use approx::assert_ulps_eq;

let p3000 = Spectrum::planckian_illuminant(3000.0);
let [l, x, y] = CIE1931.xyz(&p3000).lxy();

assert_ulps_eq!(l, 20.668_927, epsilon = 1E-6);
assert_ulps_eq!(x, 0.436_935, epsilon = 1E-6);
assert_ulps_eq!(y, 0.404_083, epsilon = 1E-6);

除了 Spectrum::planck 构造函数外,Spectrum 还有许多其他构造函数。例如,Spectrum::d65Spectrum::d50Spectrm::a 提供了 CIE D65、D50 和 A 标准光源的光谱分布。

CIE 标准色度学观察者

CIE1931Observer 类的一个实例,代表色度学标准观察者,还包括 CIE 1976 10º 标准观察者和 CIE 2015 2º 和 10º 锥形基本推导观察者。其他实例包括 CIE1976,用于 CIE 10º 标准观察者,以及 CIE2015CIE2015_10,分别用于从锥形基本推导出的 2º 和 10º 观察者。

其主要功能 CIE1931.xyz 接收一个 XYZ 类的实例作为单一参数,封装了 X、Y 和 Z 三刺激值。同样,可以使用 CIE1931.lab_d65CIE1931.lab_d50 方法来获取从颜色样品测量的光谱的 CIELAB 坐标。这些结果会产生一个 Lab 类的实例。

XYZ 三刺激值

Lab 颜色模型

RGB 颜色空间

与 Deno/TypeScript 一起使用

在 Web 应用中使用

许可证

所有内容版权©2024 Harbers Bik LLC,并许可以下之一:

任选其一。

贡献

除非你明确声明,否则任何有意提交以包含在作品中的贡献,根据 Apache-2.0 许可证的定义,应如上所述双重许可,不附加任何额外条款或条件。

依赖项

~6MB
~144K SLoC