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// Quality metrics - re-export from the butteraugli crate
85pub use butteraugli;
86
87// Test utilities (available for tests and examples)
88// Hidden from docs but always available for integration tests
89#[doc(hidden)]
90pub mod test_utils;
91
92// ============================================================================
93// Re-exports for public API
94// ============================================================================
95
96pub use error::{Error, Result};
97pub use types::{ColorSpace, JpegMode, PixelFormat, SampleDepth, Subsampling};
98
99// Encoder API
100pub use encode::{Encoder, EncoderConfig};
101
102// Decoder API
103pub use decode::{DecodedImage, Decoder, DecoderConfig};
104
105// Quality settings
106pub use quant::{Quality, QuantTable};