JPEG大小为8px或者16px的倍数是否有质量,文件大小或者其他好处?

时间:2020-03-05 18:56:38  来源:igfitidea点击:

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. 这相当有效地最小化了额外行的变换系数的成本。

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

回答

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

回答

大小为8的JPG的图像也可以旋转/翻转而不会造成质量损失。例如,gthumb可以在Linux上执行此操作。

回答

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

回答

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