jpegli/
lib.rs

1//! # jpegli
2//!
3//! Rust port of jpegli - an improved JPEG encoder and decoder.
4//!
5//! jpegli provides enhanced compression quality compared to standard JPEG
6//! through advanced quantization, optional XYB color space, and other
7//! perceptual optimizations.
8//!
9//! ## Features
10//!
11//! - **Baseline JPEG**: Standard 8-bit JPEG encoding/decoding
12//! - **Progressive JPEG**: Multi-scan progressive encoding
13//! - **XYB Color Space**: Perceptually optimized color space for better quality
14//! - **Adaptive Quantization**: Content-aware quantization for improved detail
15//! - **16-bit Support**: High bit-depth input/output
16//!
17//! ## Example
18//!
19//! ```rust,ignore
20//! use jpegli::{Encoder, ColorSpace, Quality};
21//!
22//! let pixels: &[u8] = &[/* RGB data */];
23//! let encoder = Encoder::new()
24//!     .width(640)
25//!     .height(480)
26//!     .color_space(ColorSpace::Rgb)
27//!     .quality(Quality::from_distance(1.0))
28//!     .build()?;
29//!
30//! let jpeg_data = encoder.encode(pixels)?;
31//! ```
32
33// Lint configuration is in workspace Cargo.toml [workspace.lints.clippy]
34#![allow(missing_docs)]
35#![allow(clippy::module_name_repetitions)]
36
37// ============================================================================
38// Module structure
39// ============================================================================
40
41// Public modules (stable API)
42pub mod decode;
43pub mod encode;
44pub mod error;
45pub mod quant;
46pub mod types;
47
48// Internal modules - NOT part of the stable public API.
49// These are hidden from documentation and may change without notice.
50// Use at your own risk.
51#[doc(hidden)]
52pub mod adaptive_quant;
53#[doc(hidden)]
54pub mod alloc;
55#[doc(hidden)]
56pub mod bitstream;
57#[doc(hidden)]
58pub mod color;
59#[doc(hidden)]
60pub mod consts;
61#[doc(hidden)]
62pub mod dct;
63#[doc(hidden)]
64pub mod entropy;
65#[doc(hidden)]
66pub mod huffman;
67#[doc(hidden)]
68pub mod huffman_opt;
69#[doc(hidden)]
70pub mod icc;
71#[doc(hidden)]
72pub mod idct;
73#[doc(hidden)]
74pub mod scan_script;
75#[doc(hidden)]
76pub mod simplified_quant;
77#[doc(hidden)]
78pub mod tone_mapping;
79#[doc(hidden)]
80pub mod transfer_functions;
81#[doc(hidden)]
82pub mod xyb;
83
84// Hybrid quantization (jpegli AQ + mozjpeg trellis)
85#[cfg(feature = "experimental-hybrid-trellis")]
86pub mod hybrid;
87#[cfg(feature = "experimental-hybrid-trellis")]
88pub mod hybrid_config;
89
90// Quality metrics - re-export from the butteraugli crate
91pub use butteraugli;
92
93// Test utilities (available for tests and examples)
94// Hidden from docs but always available for integration tests
95#[doc(hidden)]
96pub mod test_utils;
97
98// ============================================================================
99// Re-exports for public API
100// ============================================================================
101
102pub use error::{Error, Result};
103pub use types::{ColorSpace, JpegMode, OutputDataType, PixelFormat, SampleDepth, Subsampling};
104
105// Encoder API
106pub use encode::{Encoder, EncoderConfig};
107
108// Decoder API
109pub use decode::{DecodedImage, DecodedImageF32, Decoder, DecoderConfig};
110
111// Quality settings
112pub use quant::{Quality, QuantTable};