Skip to content
0

JPG

JPG 也叫做 JPEG,二者是意思相同,由于历史原因产生了两个名字

格式

  • SOI(Start of Image):标志着图像文件的开始。
  • APPn(Application-Specific Segments):用于存储应用程序特定的信息,如摄像头制造商信息。
  • DQT(Quantization Table):包含用于量化图像数据的表。
  • SOF(Start of Frame):包含有关图像尺寸和颜色信息的数据。
  • DHT(Huffman Table):包含用于压缩图像数据的哈夫曼编码表。
  • SOS(Start of Scan):标志着扫描数据的开始。
  • 图像数据:包含经过压缩的图像像素数据。
  • EOI(End of Image):标志着图像文件的结束。

压缩

从上面的格式可以看出,JPEG 拥有自我压缩能力,我们可以通过合并图像相似的颜色、减少颜色数量等,从而实现压缩

  • 颜色空间转换:如果图像不是在YCbCr颜色空间下表示,JPEG 压缩通常会将其转换为YCbCr颜色空间。这个颜色空间将亮度(Y)和色度(Cb和Cr)分开,有助于更好地压缩彩色信息。

  • 分块和DCT(离散余弦变换):JPEG 将图像分成小的8x8像素块。然后,对每个块应用DCT,将像素数据转换为频域表示。DCT将图像信息分解为不同频率的分量,通常将高频信息与细节和噪声相关联,而低频信息与图像的整体亮度相关联。

  • 量化:在DCT变换后,每个频域系数都被除以一个量化表中的相应值。这个量化步骤会导致一些频域系数的值变得很小,甚至为零,从而减小了图像数据的大小。量化表的选择和量化值的调整是控制压缩质量的关键因素。

  • 哈夫曼编码:压缩后的频域系数通过哈夫曼编码来表示,以进一步减小数据的大小。哈夫曼编码使用可变长度的编码来表示常见和不常见的系数,以便更有效地编码图像数据。不同的哈夫曼表可以用于不同的颜色分量和压缩质量设置。

Baseline/Progressive

JPG 文件有两种保存格式,Baseline JPG 和 Progressive JPG。这两种加载方式都是一边下载边加载图像

可以显著地提高用户体验,它告诉用户:这里有一张图片正在加载,请耐心等一下

Baseline

是一种标准的格式,许多图片产品都支持它。加载方式默认从上到下,从左到右依次加载像素点

Progressive

这种方式一开始会让图像看起来模糊不清。然后,图像开始一点一点地呈现,直到显示完全呈现的图像

Released under the MIT License.