Why JPEG Quality 100 Is Not Lossless
Setting a JPEG to a quality factor of 100 reduces visual degradation to near-imperceptible levels, but it still fails to produce a mathematically identical copy of the original image. This discrepancy occurs because the standard JPEG compression pipeline relies on inherently lossy operations—specifically color space conversions, floating-point rounding errors during the Discrete Cosine Transform (DCT), and quantization rounding—that permanently alter the original pixel values regardless of the quality setting.
Color Space Conversion and Precision Loss
Standard digital images are stored in the RGB color space. To compress an image, the JPEG encoder first converts these RGB values into the YCbCr color space (one luminance channel and two chrominance channels).
The mathematical equations used for this conversion rely on non-integer coefficients. Converting 8-bit integer RGB coordinates to YCbCr introduces floating-point numbers that must be rounded to fit back into integer representations. When the file is later decoded back to RGB, the inverse matrix calculation cannot perfectly reconstruct the initial numbers, leading to an immediate loss of mathematical precision before compression even begins.
Chroma Subsampling
In many implementations, JPEG encoders apply chroma subsampling (such as 4:2:0 or 4:2:2) to discard color resolution that the human visual system struggles to detect. While some software disables subsampling automatically at quality 100 (using 4:4:4 instead), many encoders retain subsampling unless explicitly configured otherwise. When subsampling is active, adjacent color pixels are averaged together, permanently erasing raw color data.
Discrete Cosine Transform (DCT) Rounding
JPEG divides the image into 8x8 pixel blocks and applies the Discrete Cosine Transform (DCT) to express the spatial pixel values as a sum of cosine functions at varying frequencies.
The DCT formula uses irrational numbers (such as cosines of fractional angles). Because digital processors compute these transforms using finite-precision floating-point or fixed-point arithmetic, truncation and rounding errors inevitably occur. Converting continuous wave representations back into discrete integers during decompression creates discrepancies between the original and reconstructed values.
Quantization at Quality 100
Quantization is the primary stage where deliberate data loss occurs in JPEG compression. The 64 frequency coefficients produced by the DCT are divided by corresponding values in a quantization matrix and rounded to the nearest integer.
Even at quality 100, the quantization matrix does not simply disappear:
- Non-Zero Divisors: The standard Independent JPEG
Group (IJG) algorithm scales the quantization table down, setting most
matrix values to
1. Dividing by1preserves the number, but high-frequency entries in some customized quality tables may still use values greater than1. - Rounding to Integers: Any fractional components that emerge from prior stages are forced to the nearest integer during quantization.
Because the pipeline forces intermediate values into whole numbers at multiple steps, original data cannot survive the cycle intact.
Inverse DCT and Value Clamping
During decompression, the process runs in reverse via the Inverse Discrete Cosine Transform (IDCT). The resulting pixel values rarely land exactly on valid 8-bit integers between 0 and 255.
Values with decimal points must be rounded, and values that fall below 0 or exceed 255 must be clamped to the nearest valid integer. These final adjustments ensure the output is a displayable image, but they guarantee that the underlying bitstream does not match the mathematical signature of the input file.