我们可以在不解码和重新编码的情况下改变 JPEG 图像的大小吗?

我们可以在不解码和重新编码的情况下改变 JPEG 图像的大小吗?

我想将 640x480 JPEG 图像转换为 320x240。我知道可以通过将 JPEG 图像解码为原始 YCbCr、缩放并重新编码为 JPEG 来实现。但是,使用 JPEG 编码是否可以直接缩放图像而无需解码?

答案1

可以,但前提是你的 JPEG 查看器支持智能秤JPEG 扩展名。jpg可以对 N/8 的大小执行此操作,其中 N=1..16。基本上,在重新压缩期间,DCT 块大小会从 8x8 更改为其他大小(例如 4x4),从而有效地缩放图像。

注意:SmartScale 于版本 8libjpeg 库,但它并未受到查看器的广泛支持。

您可以在此处找到详细描述这些变化的文档:JPEG 的演变

编辑:似乎大多数查看器实际上无法显示这些图像,因为它们基于 libjpeg-turbo。而 libjpeg-turbo选择不实现此功能。事实上,我尝试了不少程序(在 Ubuntu 14.04 和 Windows 8 上),没有一个能够显示使用 jpegtrans 创建的缩小图像。甚至 Photoshop、IrfanView 和 GIMP 也失败了。

编辑2:事实上,Ubuntu 和 Fedora 甚至没有提供 libjpeg8 库,而是将其完全替换为 libjpeg-turbo 版本。因此,除了一些静态链接到原始 libjpeg8 库的二进制文件外,所有程序都无法读取 JPEG SmartScale 文件。

答案2

简短的回答是“不”。JPEG 图像使用压缩,这意味着每个输出字节都依赖于所有其他字节。如果您更改图像字节数,则必须解压缩并重新压缩。

由于 JPEG 采用有损压缩,因此重新压缩会导致质量损失,但通过将分辨率降低四分之一,质量无论如何都会下降。通过在重新压缩时提高 JPEG 质量级别,您可以从低分辨率图像中获得最佳质量,尽管这当然会增加文件大小。

如果您对图像进行大量工作,最好使用无损压缩格式,例如 PNG,只有在图像最终确定后才转换为 JPEG,当然前提是您有额外的磁盘空间。

相关内容