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

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

我正在处理产品图像,想知道在最终图像尺寸中使用 16 的倍数(例如,使用尺寸为 480 像素 x 360 像素的图像)与非 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 个;在编码过程中,每第二个像素都会被丢弃,而这些 8x8 DCT 块最初为 16x16,并将解码回 16x16。在最高质量设置下这不会成为问题。

图像尺寸为 8 或 16 的倍数不会对磁盘​​大小产生太大影响,但如果您可以将视觉内容排列到 8x8 像素网格,例如如果存在重复图案或图像中的纹理。

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top