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

时间:2008-09-16 17:37:39

标签: image compression jpeg lossy-compression

JPEG压缩编码过程将给定图像分成8x8像素的块,在将来的有损压缩和无损压缩中使用这些块。 [source]

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

我正在使用产品图片,并想知道在我的最终图像尺寸中使用16的倍数(例如,使用尺寸为480像素×360像素的图像)与非图像相比可以获得多少益处 - 多个16(例如484x362)。在这个例子中,我对最终图像的进一步改动,编辑或再压缩不感兴趣。

为了更接近我所知道的特定答案,必须有很大的一般性:给定480x360图像为64k并在Photoshop [example]中以最高质量保存:

  • 我可以预期来自484x362
  • 的图像会有任何质量损失
  • 我可以期望增加多少文件大小(对于此示例,额外空间将是白色像素)
  • 比8px网格增长还有其他缺点吗?

我知道使用这个具体的例子是任意的,但是对我来说,对于我和其他可能在思考图像大小的人来说,它仍然有用,可以理解我在打破非8px网格时要处理的妥协程度

这里的关键问题是我所讨论的是8像素可分割图像的质量是否高于不能被8像素整除的图像。

5 个答案:

答案 0 :(得分:18)

8像素是截止。原因是JPEG图像只是一个8x8 DCT块的数组;如果图像分辨率在两个方向上都不是mod8,则编码器必须将两侧填充到下一个mod8分辨率。这在实践中并不是非常昂贵的一点点;更糟糕的是当图像具有不在块边界上的尖锐黑线(例如信箱图像)时的情况。这在视频编码中尤其成问题。造成这个问题的原因是尖线的频率变换是系数的高斯分布 - 导致大量的位编码。

对于那些好奇的人来说,在帧内压缩中填充边缘的最常用方法(如JPEG图像)是在边缘之前镜像像素线。例如,如果需要填充三条线而线X是边,则线X + 1等于线X,线X + 2等于线X-1,线X + 3等于线X- 2。这非常有效地最小化了额外线的变换系数的成本。

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

答案 1 :(得分:3)

有时你需要使用16个像素边界而不是8个因为子采样;在编码过程中,每个第二个像素都被丢弃,那些8x8 DCT块以16x16开始,并将解码回16x16。在最高质量的设置下,这不会成为问题。

答案 2 :(得分:2)

图像尺寸为8或16的倍数不会对磁盘​​上​​的尺寸造成太大影响,但如果您可以将可视内容排列到8x8像素网格(例如,如果有),则可以节省大量成本在图像中重复图案或纹理。

答案 3 :(得分:2)

尺寸为8倍的JPG也可以旋转/翻转而不会有质量损失。例如,gthumb可以在Linux上执行此操作。

答案 4 :(得分:1)

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