GD 可以在渐进式 JPEG 中选择隔行扫描的深度吗?

Posted

技术标签:

【中文标题】GD 可以在渐进式 JPEG 中选择隔行扫描的深度吗?【英文标题】:Can GD pick the depth of interlacing in a progressive JPEG? 【发布时间】:2012-12-15 08:00:58 【问题描述】:

我知道使用imageinterlace 可以创建渐进式图像,但我需要知道是否可以实际请求特定的渐进式步骤。假设 Jpeg 文件是使用 3 级扫描创建的,我可以将其降级到仅 2 级或 1 级吗?

【问题讨论】:

您能说出几个让您选择隔行扫描深度的程序吗?我以前从未见过这个选项。 @Charles,我不知道,但我正在编写一个不允许实时流式传输的客户端软件,我只有在完全下载后才能获得图像,缺少所有渐进阶段,因此,我需要知道是否可以手动下载每个深度。谢谢 【参考方案1】:

这似乎不是您在构建 JPEG 时可以实际控制的事情。

来自Wikipedia's article on JPEG:

基线 JPEG 还支持渐进式编码。顺序编码一次编码单个块的系数(以锯齿形方式),渐进式编码一次编码所有块的相似位置系数,然后是所有块的下一个定位系数,依此类推。因此,如果图像被划分为 N 个 8×8 块 B0,B1,B2, ..., Bn-1,那么渐进式编码对所有块编码 Bi(0,0),即对于所有 i = 0 , 1, 2, ..., N-1。接下来是编码所有块的 Bi(0,1) 系数,然后是所有块的第 Bi(1,0) 系数,然后是所有块的第 Bi(2,0) 系数,依此类推。这里需要注意的是,一旦所有位置相似的系数都被编码,下一个要编码的位置就是在the figure above 中指示的之字形遍历中的下一个位置。

根据描述,没有办法实际控制 JPEG 隔行扫描的性质。通过次数是标准和图像格式本身的一部分。

在most other image formats中同样是不可控的,大多数在他们的标准中也明确调用了一个且只有一个隔行公式,除了TGA,它有两个。

【讨论】:

【参考方案2】:

Photoshop 允许您选择渐进式 JPEG 的扫描次数(3、4 或 5)。

imageinterlace 的 $interlace 值是 int 而不是 bool,这让我想知道 > 0 的值是否不仅仅是启用它,而是选择扫描次数。手册没有确认这一点,但可能值得一试。

我也不知道扫描计数是否存在低于 3 或高于 5。在这种情况下,您会认为他们必须提及它,因此您不会选择 1 作为值...但是谁知道呢。我可以玩一下。

【讨论】:

【参考方案3】:

JPEG 图像实际上不是隔行扫描的。 Progressive JPEG 允许您分解每个 8x8 数据块的 DC 系数和 AC 系数范围。这会优化数据,但每次扫描都适用于所有像素(与实际隔行扫描不同)。

JPEG 允许您指定逐行图像的扫描次数。 JPEG 术语是“光谱选择”。对于 AC 系数,您还可以灵活地对扫描进行排序。

问题在于 JPEG 在这方面具有很大的灵活性,因此很难创建一个可以让您充分利用所有这些灵活性的编程或用户界面。

每个组件必须至少进行 2 次扫描(否则不会是渐进式的)。

【讨论】:

以上是关于GD 可以在渐进式 JPEG 中选择隔行扫描的深度吗?的主要内容,如果未能解决你的问题,请参考以下文章

在基于 MFC 的应用程序中逐步渲染图像

渐进式jpeg(progressive jpeg)图片及其相关

libjpeg 中的渐进式 JPEG

渐进式 JPEG (Progressive JPEG)来提升用户体验

播放图像有锯齿_反隔行操作

隔行扫描, 逐行扫描