Something went wrong. Try again.
A Rust library for colorimetry, color space conversions, and color manipulation.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139#![cfg_attr(docsrs, feature(doc_cfg))]//! A Rust library for colorimetry, color space conversions, and color manipulation.//!//! Farg provides context-aware color conversions with f64 precision, spectral data processing,//! and chromatic adaptation. It's designed to serve web developers with sensible defaults while//! giving colorimetrists full control over illuminants, observers, and adaptation transforms.//!//! # Quick Start//!//! Create colors, convert between spaces, and manipulate components://!//! ```//! use farg::space::{ColorSpace, Rgb, Srgb, Xyz};//!//! // Create an sRGB color from 8-bit values//! let color = Rgb::<Srgb>::new(255, 87, 51);//!//! // Convert to CIE XYZ//! let xyz: Xyz = color.to_xyz();//! let [x, y, z] = xyz.components();//!//! // Adjust luminance while preserving chromaticity//! let brighter = xyz.with_luminance_scaled_by(1.2);//! ```//!//! # Architecture//!//! Colors in farg exist within a **viewing context** consisting of://!//! - An [`Illuminant`] — the light source (e.g., D65 daylight, D50 for print)//! - An [`Observer`] — the human visual system model (e.g., CIE 1931 2°)//! - A [`ChromaticAdaptationTransform`] — how the eye adjusts to different lighting//!//! By default, colors use the D65 illuminant with the CIE 1931 2° observer and the Bradford//! chromatic adaptation transform. This matches the standard sRGB viewing environment.//!//! Conversions flow through hub color spaces to minimize implementation complexity://!//! - **[`Xyz`](space::Xyz)** — universal hub for device-independent spaces//! - **[`Lms`](space::Lms)** — cone response space used for chromatic adaptation//! - **Linear RGB** — intermediate hub for the RGB family (gamma decode → linear → XYZ)//!//! # Color Spaces//!//! The [`space`] module contains all color space types and the [`ColorSpace`](space::ColorSpace)//! trait. [`Xyz`](space::Xyz), [`Lms`](space::Lms), and [`Srgb`](space::Srgb) are always//! available. Additional RGB spaces are enabled through feature flags://!//! ```toml//! [dependencies]//! farg = { version = "0.1", features = ["rgb-display-p3", "rgb-adobe-rgb"] }//! ```//!//! All color spaces implement the [`ColorSpace`](space::ColorSpace) trait, providing a common//! interface for conversions, luminance operations, and component access.//!//! # Chromatic Adaptation//!//! Adapt colors between different illuminants using a [`ChromaticAdaptationTransform`]://!//! ```//! # #[cfg(feature = "illuminant-d50")]//! # {//! use farg::{Cat, ColorimetricContext, Illuminant};//! use farg::space::Xyz;//!//! let d50_context = ColorimetricContext::new()//! .with_illuminant(Illuminant::D50)//! .with_cat(Cat::BRADFORD);//!//! let color = Xyz::new(0.95047, 1.0, 1.08883);//! let adapted = color.adapt_to(d50_context);//! # }//! ```//!//! # Spectral Data//!//! Farg includes spectral power distribution (SPD) data for all standard illuminants and color//! matching function (CMF) data for all standard observers. Access spectral data through the//! [`SpectralTable`] trait://!//! ```//! use farg::{Illuminant, Observer, SpectralTable};//!//! let d65 = Illuminant::D65;//! let spd = d65.spd();//! let power_at_550nm = spd.at(550);//!//! let observer = Observer::CIE_1931_2D;//! let cmf = observer.cmf();//! let xyz = cmf.spectral_power_distribution_to_xyz(&spd);//! ```//!//! # Chromaticity//!//! The [`chromaticity`] module provides coordinate systems for representing color independent//! of luminance. [`Xy`](chromaticity::Xy) (CIE 1931) is always available; additional systems//! like [`Uv`](chromaticity::Uv) and [`Upvp`](chromaticity::Upvp) are feature-gated.//!//! # Feature Flags//!//! Farg uses granular feature flags so you only compile what you need. The `default` feature//! enables `cat-bradford`. The D65 illuminant, CIE 1931 2° observer, sRGB, and XYZ/LMS//! spaces are always available regardless of feature selection.//!//! | Feature | Contents |//! |---------|----------|//! | `full` | Everything |//! | `all-cats` | All chromatic adaptation transforms |//! | `all-chromaticity` | All chromaticity coordinate systems |//! | `all-illuminants` | All standard illuminants |//! | `all-observers` | All standard observers |//! | `all-rgb-spaces` | All RGB color spaces |
mod chromatic_adaptation_transform;pub mod chromaticity;pub mod color_vision_deficiency;mod component;mod context;pub mod contrast;pub mod correlated_color_temperature;pub mod distance;mod error;mod illuminant;mod matrix;mod observer;pub mod space;mod spectral;
pub use chromatic_adaptation_transform::{Cat, ChromaticAdaptationTransform};pub use context::ColorimetricContext;pub use error::Error;pub use illuminant::{Builder as IlluminantBuilder, Illuminant, IlluminantType};pub use observer::{Builder as ObserverBuilder, Modifier as FairchildModifier, Observer};pub use spectral::{ ChromaticityCoordinates, Cmf, ColorMatchingFunction, ConeFundamentals, ConeResponse, Spd, SpectralPowerDistribution, Table as SpectralTable, TristimulusResponse,};