我想将 640x480 JPEG 图像转换为 320x240。我知道这可以通过将 JPEG 图像解码为原始 YCbCr、缩放并将其重新编码为 JPEG 来完成。但是 JPEG 编码是否有可能在不解码的情况下直接缩放图像?
jmi*_*rez 15
您可以,但前提是您的 JPEG 查看器支持SmartScale JPEG 扩展。jpegtran可以为 N/8 的大小执行此操作,其中 N=1..16。基本上,DCT 块大小在重新压缩期间从 8x8 更改为其他大小(例如 4x4),从而有效地缩放图像。
注意:SmartScale 是在libjpeg 库的第 8 版中引入的,但并未得到查看者的广泛支持。
可以在此处找到详细描述更改的文档:Evolution of JPEG。
编辑:似乎大多数观众实际上无法显示这些图像,因为它们基于 libjpeg-turbo。而 libjpeg-turbo选择不实现此功能。事实上,我已经尝试了很多程序(在 Ubuntu 14.04 和 Windows 8 上),但没有一个能够显示使用 jpegtrans 创建的缩小图像。甚至 Photoshop、IrfanView 和 GIMP 都失败了。
编辑 2:事实上,Ubuntu 和 Fedora 甚至不提供 libjpeg8 库,而是将其完全替换为 libjpeg-turbo 版本。因此,除了一些静态链接到原始 libjpeg8 库的二进制文件之外,所有程序都无法读取 JPEG SmartScale 文件。
最简洁的答案是不。JPEG 图像使用压缩,这意味着每个输出字节都依赖于所有其他字节。如果更改图像字节数,则必须解压缩并重新压缩。
重新压缩会导致质量损失,因为 JPEG 使用有损压缩,但无论如何,通过将分辨率四分之一化都会损失质量。通过在重新压缩时提高 JPEG 质量级别,您可以从低分辨率图像中获得尽可能最佳的质量,但这当然会增加文件大小。
如果您对图像进行大量处理,最好使用无损压缩格式(例如 PNG),仅在图像完成后才转换为 JPEG,当然前提是您有额外的磁盘空间。
| 归档时间: |
|
| 查看次数: |
3477 次 |
| 最近记录: |