关于图像:JPEG大小为8px或16px的倍数是否对质量,文件大小或其他方面有所帮助?

关于图像:JPEG大小为8px或16px的倍数是否对质量,文件大小或其他方面有所帮助?

Is there a quality, file-size, or other benefit to JPEG sizes being multiples of 8px or 16px?

JPEG压缩编码过程将给定的图像分割为8x8像素的块,并在以后的有损和无损压缩中使用这些块。 [资源]

还提到如果图像是多个1MCU块(定义为最小编码单位,"通常在两个方向上均为16个像素"),则可以对JPEG执行无损更改。 [资源]

我正在使用产品图片,并且想知道在最终图片尺寸中使用16的倍数(例如,使用尺寸为480px x 360px的图片)与非倍数的图片是否可以以及从中获得多少收益16(例如484x362)。在此示例中,我对最终图像的进一步更改,编辑或重新压缩不感兴趣。

为了尽量接近我所知道的特定答案,必须大致上具有一般性:给定480x360的图像,该图像为64k,并且在Photoshop中以最高质量保存[示例]:

  • 我可以预期484x362的图像会导致质量下降吗?
  • 我可以预期增加多少文件大小(在此示例中,额外的空间将是白色像素)
  • 扩大到大于8px的网格还有其他不利之处吗?

我知道使用该特定示例是任意的,但了解我在打破非8px网格时将要处理的折衷程度仍然有帮助(对我本人以及其他可能在考虑图像大小的人)。

这里的关键问题是我争论过的一个问题是8像素可分割图像是否比8像素不可分割的图像质量更高。


截止值为8像素。原因是因为JPEG图像只是8x8 DCT块的阵列;如果图像分辨率在两个方向上都不都是mod8,则编码器必须将侧面向上填充到下一个mod8分辨率。实际上,这并不是十分昂贵。更糟的是,当图像上的黑线(如带信箱的图像)不位于块边界上时。这在视频编码中尤其成问题。这是一个问题,原因是尖线的频率变换是系数的高斯分布-导致要编码的比特数很大。

对于那些好奇的人,在内部压缩(例如JPEG图像)中填充边缘的最常见方法是镜像边缘之前的像素行。例如,如果您需要填充三行并且X线是边缘,X + 1线等于X线,X + 2线等于X-1线,X + 3线等于X- 2。这相当有效地最小化了额外行的变换系数的成本。

但是,在帧间编码中,填充算法通常只复制最后一行,因为镜像方法不适用于帧间压缩,例如在视频压缩中。


有时,由于二次采样,您需要使用16个像素边界而不是8个像素边界。在编码过程中,每个第2个像素将被丢弃,这些8x8 DCT块开始时为16x16,并将解码回16x16。在最高质量的设置下,这将不是问题。


也可以旋转/翻转大小为8的倍数的JPG,而不会降低质量。例如,gthumb可以在Linux上执行此操作。


图像尺寸为8或16的倍数不会很大程度地影响磁盘上的大小,但是如果您可以将可视内容排列到8x8像素网格中(例如,如果有重复的图案或图像中的纹理。


托梅茨基说了什么。如果没有正确的倍数,则无损翻转和旋转算法将不起作用。这是因为现在可以安全地忽略的右侧/底部的填充最终会在左侧/顶部无法实现。


推荐阅读