1 历史
1.1 标准制定背景(1986-1992年)
20世纪80年代中期,随着数码相机、彩色打印机和计算机图形学的兴起,人们对压缩静态图像的需求急剧增长。当时流行的GIF格式只能支持256种颜色,且不适合存储照片级真彩图像;而TIFF格式虽能保留质量,但文件体积极大,难以在低速网络中传输。1986年,国际标准化组织(ISO)与国际电工委员会(IEC)共同组建了联合图像专家组(JPEG),旨在制定一套通用的、高效的连续色调图像压缩标准。经过长达六年的讨论与试验,JPEG于1992年发布正式标准(ISO/IEC 10918-1),首次将离散余弦变换(DCT)与量化、Huffman编码结合,使得照片类图像可以在保持视觉可接受质量的前提下压缩到原来的十分之一甚至更小。这一标准迅速被软硬件厂商采纳,成为数字图像存储和传输的基石。
1.2 主要版本与扩展(JPEG 1、JPEG LS、JPEG 2000)
1.2.1 初代JPEG:奠定基础
初代JPEG(通常称JPEG 1)定义了两种基本编码模式:基于DCT的有损模式(最常用)和基于预测的无损模式。它支持4种色彩空间和多种子采样选项,并通过质量因子(Q值)调节压缩程度。由于算法简单、硬件实现成本低,JPEG 1迅速成为数码相机、网页图像和社交分享的默认格式。其缺点也很明显:在极低码率下会出现明显的块效应和颜色扩散,且不支持透明度和动画。
1.2.2 JPEG 2000:生不逢时的“高阶兄弟”
2000年,JPEG组织推出了JPEG 2000标准(ISO/IEC 15444),旨在取代老旧的JPEG。它采用小波变换(Discrete Wavelet Transform)代替分块DCT,支持无损压缩、渐进式传输(从缩略图到全分辨率)以及感兴趣区域(ROI)编码。理论上JPEG 2000在相同码率下画质优于JPEG,且避免了块效应。然而,由于专利授权费用高昂、计算复杂度高(解码速度慢)以及当时硬件性能有限,JPEG 2000始终未能在消费市场普及,仅在小众领域(如医学影像DICOM、数字影院)站稳了脚跟。网友常调侃它是“生不逢时的高阶兄弟”——技术强,但市场没给他让座。
1.3 专利与标准化争议
JPEG标准的制定过程中,涉及多项核心专利(尤其是Huffman编码的优化实现和量化表设计)。20世纪90年代至21世纪初,Forgent Networks等公司曾向数百家企业发起专利诉讼,声称JPEG压缩技术侵犯其持有专利,导致众多中小软件开发者被迫支付许可费。最终,因专利广泛且缺乏足够创造性,这些诉讼大多被驳回或和解。这场风波让JPEG留下了“专利壁垒”的历史包袱,也促使后来者(如WebP、HEIF)设计时极力规避专利风险。至今,使用最广泛的JPEG基础算法(如已公开的量化表和Huffman代码表)已被普遍认定为公共领域,但一些扩展功能(如算术编码)仍受专利保护。
2 技术原理
2.1 色彩空间转换(RGB → YCbCr)
JPEG首先将图像从RGB(红绿蓝)色彩空间转换为YCbCr。其中Y表示亮度(Luma),Cb表示蓝色色度,Cr表示红色色度。这一步的意义在于:人眼对亮度变化非常敏感,但对色彩的变化感知较弱——这就为后续压缩提供了“拆东墙补西墙”的机会。
2.1.1 Y(亮度)与Cb/Cr(色度)分离的意义
分离后,亮度通道保留完整细节,色度通道则可以“作弊”性地降低分辨率(即色度子采样),从而大幅减少数据量。在实际图像中,大多数区域的颜色变化远比亮度变化平缓,因此扔掉一半甚至四分之三的色度信息,人眼几乎看不出差异。
2.2 色度子采样(4:4:4、4:2:2、4:2:0)
色度子采样用三个数字描述亮度与色度的采样比率:
- 4:4:4:不进行子采样,每4个亮度像素对应4个色度像素(完整保留颜色)。
- 4:2:2:水平方向色度采样减半,每4个亮度像素对应2个色度像素(常用于专业视频)。
- 4:2:0:水平和垂直方向均减半,每4个亮度像素对应1个色度像素(JPEG默认选项,也是最常见的形式)。4:2:0模式能使文件体积减少约30%–50%,且对照片视觉影响极小,是“上网冲浪的标配”压缩配置。
2.3 离散余弦变换(DCT)
2.3.1 8×8分块与频率域分析
JPEG将每个颜色通道的图像切分为不重叠的8×8像素块。对每个块应用正向离散余弦变换(FDCT),将空间域的像素值转换为频率域的系数矩阵(同样大小为8×8)。这个矩阵的左上角代表低频分量(图像平滑部分),右下角代表高频分量(边缘、纹理等细节)。频率域的优点是可以更高效地量化:人眼对高频细节不敏感,就可以“睁一只眼闭一只眼”。
2.3.2 低频与高频的“分家”
变换后,低频系数(尤其是左上角的DC系数)反映了块的整体亮度均值,而高频系数(AC系数)则刻画了细节与边缘。在后续量化步骤中,高频系数往往被粗暴地“四舍五入”至零,从而实现压缩——这也导致了JPEG的主要失真(块效应和振铃伪影)都集中在高频区域。
2.4 量化(量表的“杀手锏”)
量化是JPEG有损压缩的核心:将DCT系数除以量化表中的对应数值(与频率位置有关),然后向下取整。低频率的量化步长较小(保留较多信息),高频率的量化步长较大(舍弃细节)。经过量化后,大量高频系数变为零,只有少数非零系数被保留下来,极大地缩短了后续编码的数据量。
2.4.1 标准量化表与自定义量化表
ISO推荐了两套标准量化表:一套用于亮度通道,一套用于色度通道。色度表的数值整体更大,这是为了更激进地压缩色度信息。JPEG解码器也必须支持这两套表。同时,编码器允许自定义量化表,从而根据图像内容微调压缩效果(例如对平滑区域使用更重度的量化)。不过大多数软件默认使用标准表,仅通过调整质量因子(Q值)来缩放表内数值。
2.4.2 质量因子(Q值)的玄学
质量因子是一个从0到100的整数(常见的如75、85、95),它决定了量化表数值的缩放比例。Q值越大,量化表数值缩放得越小(保留更多细节),文件体积越大;Q值越小,量化表数值缩放得越大(丢弃更多细节),文件体积越小。但Q值与视觉质量并非线性关系:Q=90和Q=95的差别肉眼几乎看不出,而Q=50和Q=55则可能有明显差异。因此,许多用户习惯用“Q值=75”作为“画质与体积平衡”的黄金参数,但具体最优值因图像内容而异——这就是所谓的“质量的玄学”。
2.5 熵编码
2.5.1 Huffman编码(默认选项)
量化后的系数(大量为零的AC系数,以及少量的DC/AC非零值)需进一步压缩。JPEG采用Huffman编码进行无损压缩:统计每个符号(例如DC系数差值、非零AC系数的游程和数值)的出现频率,生成短码给高频符号、长码给低频符号。由于Huffman编码依赖预设或统计生成的码表,实现简单且解码速度快,因此几乎所有的JPEG编码器默认使用它。
2.5.2 算术编码(JPEG扩展支持)
算术编码是Huffman编码的增强版本,理论上可以在相同码率下再压缩5%–15%。但它受限于专利(直到2003年左右才解除)以及解码复杂度高,在消费产品中几乎没有实际应用。大部分普通用户可能一辈子都遇不到一个真正使用算术编码的JPEG文件——它更像一个“理论上存在但没人用”的彩蛋。
3 编码与解码流程
3.1 编码流程概览
JPEG编码过程可概括为:色彩空间转换 → 色度子采样 → 分块 → 正向DCT → 量化 → Z字形扫描 → 熵编码(Huffman/算术) → 生成字节流。
3.1.1 分块与正向DCT
图像被切分为8×8像素块(若图像尺寸不是8的倍数,则边缘需填充或扩展)。每个块单独执行FDCT,得到8×8的系数矩阵。
3.1.2 量化与Z字形扫描
使用量化表对每个系数矩阵进行量化,将高频系数变成零。接着采用Z字形(Zigzag)顺序遍历矩阵,从左到右、从上到下按频率从低到高扫描,这样可使连续零成串出现,便于后续游程编码。Z字形的路径形似一条蛇,绕遍8×8矩阵的每一个格子。
3.1.3 DC系数差分编码、AC系数游程编码
- DC系数(块左上角第一个系数)反映了块的亮度均值。由于相邻块的均值变化较小,JPEG对DC系数进行差分编码(DPCM),即只存储当前块与上一块DC系数之差,从而节省空间。
- AC系数(其余63个系数)采用游程编码(RLE):记录“零的个数”和“下一个非零系数的值”,并以一个特殊字节(EOB)表示块内剩余全部为零。最终将DC差值和AC游程对送入Huffman编码生成比特流。
3.2 解码流程概览
解码是编码的逆过程:从比特流中提取Huffman码 → 恢复DC差值及AC游程 → 反填充系数矩阵 → 反量化 → 逆DCT(IDCT) → 色彩空间转换回RGB → 输出图像。
3.2.1 熵解码与反量化
解码器通过预设的Huffman表将比特流还原为量化后的系数。然后乘以量化表中的值(反量化),得到近似的DCT系数(有精度损失)。
3.2.2 反DCT与色彩空间还原
对每个8×8块执行逆DCT,得到近似的像素值。若曾使用色度子采样,则需将色度通道通过插值放大回原始尺寸。最后将YCbCr转换回RGB,输出最终图像。
3.3 质量权衡:压缩比与视觉失真
JPEG的压缩比通常在10:1到20:1之间(Q=75左右),此时视觉失真可接受。当压缩超过30:1时,块效应、颜色渗色和振铃伪影变得明显,图像看起来像“马赛克拼图”。用户必须在文件大小和画质之间做出权衡——这也是JPEG最核心的“天平”。
4 文件格式与元数据
4.1 JFIF(JPEG File Interchange Format,标准容器)
JFIF是1992年与JPEG标准一同推出的文件格式容器,定义了压缩比特流的封装方式。几乎所有.jpg/.jpeg文件都遵循JFIF规范。
4.1.1 文件头、图像数据、标记段结构
JFIF文件以SOI(Start of Image,0xFFD8)标记开始,随后是APP0标记(包含版本号、分辨率、缩略图信息等),然后是编码的图像数据段(包含SOF、SOS等标记),最后以EOI(End of Image,0xFFD9)结束。标记段之间可以插入注释(COM)、量化表(DQT)、Huffman表(DHT)等。解码器根据标记顺序解析文件。
4.2 EXIF(可交换图像文件格式)
EXIF主要是由日本电子工业发展协会(JEIDA)制定的元数据标准,常嵌入在JPEG文件的APP1标记段内。
4.2.1 相机元数据与地理标记
EXIF记录了拍摄时的相机型号、光圈、快门速度、ISO、焦距、白平衡等信息,也包括GPS地理坐标。因此,一张普通的旅行照片可能无意中泄露了精确的家庭地址——发朋友圈前记得清除EXIF。此外,EXIF还支持自定义用户注释和缩略图预览。
4.3 嵌入缩略图与ICC色彩配置文件
- 缩略图:许多相机和图像处理软件会在JPEG文件的APP1段嵌入一小张低分辨率预览图(通常160×120像素),以便快速显示。
- ICC配置文件:支持通过APP2标记段嵌入ICC色彩配置文件,确保图像在不同设备上显示一致的颜色。但大部分消费级软件会忽略此信息,导致“你以为的红色和我看到的红色不一样”的悲剧。
5 应用与变体
5.1 数码摄影与网页图像(“上网冲浪的标配”)
JPEG是数码相机、手机拍照的默认输出格式,几乎所有网页浏览器和社交媒体平台都原生支持JPEG。它凭借“小巧、兼容、够用”的特性,成为互联网上流传最广的图像格式——“上网冲浪的标配”名副其实。
5.2 渐进式JPEG(从模糊到清晰,祖传加载动画)
标准JPEG采用“从上到下逐行扫描”的基线模式。而渐进式JPEG(Progressive JPEG)则将图像分解为多个扫描(scans),解码时先从低分辨率重建模糊版本,再逐步细化到清晰。这种“祖传加载动画”在早期网速慢时特别实用——用户可以提前看到图像主题,而不必等全部数据下载完毕。不过,渐进式JPEG通常文件体积略大,且在某些老旧浏览器上有兼容问题。
5.3 多帧JPEG(Motion JPEG,安防监控的老将)
Motion JPEG(M-JPEG)将视频的每一帧独立压缩为JPEG图像,然后串联成视频流。它实现简单,对帧类型无依赖性,且能逐帧随机访问——非常适合安防监控录像,因为取证时需要快速跳转到特定时刻。缺点是没有帧间压缩,码率远高于现代视频编码(如H.264),但随着存储成本下降,它仍在许多嵌入式摄像头中服役。
5.4 JPEG 2000:医学影像与数字影院的专用选手
JPEG 2000依赖其无损模式和可伸缩性,在医学影像(DICOM标准要求)和数字影院(DCP)中占据一席之地。在这些领域,码率不是最敏感的,但图像质量和逐级渐进的解码能力至关重要。而在普通用户面前,它始终是个“知道名字但从不打开”的格式。
5.5 JPEG XR、JPEG XL(新一代后缀选手)
- JPEG XR(原HD Photo)由微软提出,支持更高效的编码和更高的位深(HDR),但推广不成功。
- JPEG XL是JPEG组织2019年后推出的新一代标准,融合传统JPEG兼容性、更高压缩效率和现代特性(如无损模式、HDR、动画)。它被寄望成为“跨平台终极答案”,但目前普及率仍较低,且需要浏览器和操作系统的原生支持。
6 局限性与调侃
6.1 块效应与振铃伪影(“JPEG原罪”)
由于JPEG对8×8分块独立进行DCT和量化,高频信息丢失后,块边界处会出现明显的亮度跳跃或马赛克感,即块效应(blocking artifacts)。同时,在图像强边缘附近会产生类似“水波纹”的振铃伪影(ringing)。这些视觉失真被网友戏称为“JPEG原罪”——任何一张JPEG图片放大了看,都能看到一块块小方格,仿佛在提醒你“我是有损的”。
6.2 不适合线条图、文字和渐变(“一压就糊”)
JPEG是为连续色调图像设计的。对于含有清晰文字、细线、人工图形或平滑渐变的图像(如截图、标志、漫画),JPEG的压缩会导致文字边缘出现模糊的彩色雾气(chroma blur),渐变区域出现条带(banding)——俗称“一压就糊”。因此,这类图像首选PNG或GIF。
6.3 多次重压缩的“生死轮回”(质量指数级下降)
每次保存JPEG文件(即使只是旋转或修改元数据)都会执行新的量化,导致质量逐次下降。多次重压缩更像是“往豆浆里兑水,再冻成冰再化开”——块效应越来越重,最终变成一团模糊。专业流程中建议保留原始无损文件(如RAW、TIFF),仅对最终输出做一次JPEG压缩。
6.4 专利壁垒的历史包袱
如前文所述,JPEG曾经被专利诉讼困扰多年,虽已基本解决,但阴影犹存。这使得一些开源和商业项目在实现解码器时不得不小心翼翼,或在替代格式(如WebP)中寻求更干净的产权。对普通用户而言,这个包袱只是一段“网上传说”——毕竟谁也不会因为专利问题放弃拍照片。
7 替代者与未来
7.1 现代有损压缩格式:WebP、AVIF、HEIF
- WebP:Google在2010年推出的有损/无损格式,基于VP8视频编码框架,支持透明度、动画和更小的文件体积(相比JPEG可缩小25%–35%)。目前Chrome、Edge、Safari等主流浏览器均已支持,但老旧浏览器(如旧版IE)和部分图像处理软件兼容性不足。
- AVIF:基于AV1视频编码的静态图像格式,压缩效率更高(比WebP再省约20%),支持HDR和逐级渐进。随着AV1硬件解码普及,AVIF正在成为“下一任JPEG”,但编码速度较慢。
- HEIF:苹果主导的基于HEVC(H.265)的图像格式,iPhone和macOS原生支持。文件体积比JPEG小一半左右,但跨平台兼容性仍需第三方插件。
这三种格式在不同场景下已开始挑战JPEG的统治地位,但JPEG的“万能兼容”仍然是它们短期内难以超越的护城河。
7.2 无损压缩的“硬核”选择(PNG、FLIF)
- PNG:广泛用于需要保真的场景(如软件截图、标志、图形),支持完全无损和透明度。缺点是无损压缩率通常比有损差很多,不适合照片存储。
- FLIF(自由无损图像格式)声称比PNG压缩率高30%–50%,但浏览器支持几乎为零,更多是技术爱好者的玩具。
7.3 JPEG XL:试图跨平台的“最终答案”
JPEG XL 设计目标是直接替代JPEG:它对现有JPEG文件提供近乎无损的重编码(反向兼容),同时支持全新高压缩模式(有损/无损)、HDR、动画、大尺寸图像和并行解码。若浏览器和操作系统广泛原生支持,它有望成为下一代通用图像格式。但截至2025年,各大浏览器对JPEG XL的支持态度参半(如Chrome曾短暂支持后移除),普及进度依然缓慢。
7.4 神经网络压缩:AI会取代JPEG吗?
近年来,基于神经网络的图像压缩(如Google的JPEG-AI、Meta的NeuralJPEG)在超低码率下展示出比传统算法更好的视觉质量。这类方法通过大量图像数据训练模型,学习如何智能地保留感知重要特征。然而,神经网络压缩需要专用硬件(如GPU)解码,文件体积大、标准化程度低,且难以在数十亿旧设备上运行。短期内它无法撼动JPEG的地位,但长远来看,AI压缩可能成为“JPEG之后的下一个50年标识”——不过那时,或许我们都已经不是用JPEG发朋友圈了。