我们可以更改JPEG图像的大小而不进行解码和重新编码吗?


12

我想将640x480 JPEG图像转换为320x240。我知道可以通过将JPEG图像解码为原始YCbCr,缩放比例并将其重新编码为JPEG来完成。但是,使用JPEG编码有可能直接缩放图像而不进行解码吗?

Answers:


14

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

注意:SmartScale是在libjpeg库的版本8中引入的,但是并未得到查看者的广泛支持。

可以在以下位置找到详细描述更改的文档:JPEG的演变

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

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


是否存在仅通过将更多数据附加到图像来构造图像的编解码器?
Necktwi 2014年

渐进式jpeg呢?它不是完全符合我的要求吗?
Necktwi 2014年

不,通过提高图像质量(从低到完整),这会有所不同,但是分辨率始终不变(参考)。但是,还有另一个称为“分层模式”的JPEG扩展,它编码不同的分辨率(另请参见此处)。但是同样,libjpeg-turbo不支持它(请参阅此处,在文本中搜索“ progressive”)。
jmiserez 2014年

1
为了回答第一个评论,当然有这样的编解码器。只是没有JPG。您正在寻找的被称为图像金字塔或多尺度表示。例如,JPEG2000使用小波变换来创建小波金字塔。还有其他金字塔,例如高斯金字塔或拉普拉斯金字塔。该幻灯片组很好地概述了工作原理,而此处此处都讨论了JPEG2000 。
jmiserez 2014年

感谢您提供有关新JPEG格式的信息。我不希望有很多源图像(相机,扫描仪等)使用它们。
AFH 2014年

3

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

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

如果您要处理大量图像,则最好以无损压缩格式(例如PNG)工作,仅在完成图像处理后才转换为JPEG,当然,前提是您有额外的光盘空间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.