image - JPEG 大小为 8 像素或 16 像素的倍数是否有质量、文件大小或其他好处?

标签 image compression jpeg lossy-compression

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

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

我正在处理产品图像,并且想知道在最终图像尺寸中使用 16 的倍数(例如,使用尺寸为 480 像素 x 360 像素的图像)与非- 16 的倍数(例如 484x362)。在此示例中,我对最终图像的进一步更改、编辑或重新压缩不感兴趣。

为了尝试更接近一个具体的答案,我知道肯定有很大的普遍性:给定一个 64k 的 480x360 图像,并在 Photoshop 中以最高质量保存 [example] :

  • 484x362 的图像是否会出现质量损失
  • 我预计文件大小会增加多少(在本例中,额外的空间将为白色像素)
  • 增大到超过 8 像素网格还有其他缺点吗?

我知道使用该特定示例是任意的,但它仍然有助于(对于我和可能的任何其他考虑图像大小的其他人)了解在破坏非 8px 网格时我将要处理的妥协程度.

这里的关键问题是我曾经争论过的一个问题,即 8 像素可整除的图像是否比不可被 8 像素整除的图像质量更高。

最佳答案

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

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

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

关于image - JPEG 大小为 8 像素或 16 像素的倍数是否有质量、文件大小或其他好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74892/

相关文章:

image - 如何在滚动框上创建缓慢的滚动效果?

android - 移动图像缓存大小限制?

linux - 如何预压缩非常大的html文件

html - 错误的 jpg 在 ie 上呈现

html - 为什么对象适合不影响图像?

c++ - QT绘制平铺图像的方法

apache - 在 Apache 上使用 Brotli 提供预压缩内容

c# - C++ 和 SharpZipLib

java - 有损压缩中的隐写术 (JAVA)

c# - 获取 8*8 block 图像到 arrayList