我知道使用imageinterlace
它可以创建渐进式图像,但我需要知道是否可以实际要求渐进式的特定步骤。假设 Jpeg 文件是使用 3 级扫描创建的,我可以将其降级到仅 2 级或 1 级吗?
3 回答
这似乎不是您在构建 JPEG 时可以实际控制的事情。
Baseline 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) 系数,依此类推。这里应该注意,一旦所有位置相似的系数都被编码,下一个要编码的位置就是锯齿形遍历中下一个出现的位置,如上图。
鉴于描述,没有办法实际控制 JPEG 隔行扫描的性质。遍数是标准和图像格式本身的一部分。
它在大多数其他图像格式中同样不可控,其中大多数在其标准中也明确调用了一个且只有一个隔行扫描公式,除了 TGA,它有两个。
JPEG 图像实际上不是隔行扫描的。Progressive JPEG 允许您分解每个 8x8 数据块的 DC 系数和 AC 系数范围。这会细化数据,但每次扫描都适用于所有像素(与实际隔行扫描不同)。
JPEG 允许您指定逐行图像的扫描次数。JPEG 术语是“光谱选择”。对于 AC 系数,您还可以灵活地对扫描进行排序。
问题是 JPEG 在这方面具有很大的灵活性,因此很难创建允许您利用所有这些灵活性的编程或用户界面。
每个组件必须至少进行 2 次扫描(否则不会是渐进式的)。
Photoshop 允许您选择渐进式 JPEG 的扫描次数(3、4 或 5)。
imageinterlace 的 $interlace 值是 int 而不是 bool,这让我想知道 > 0 的值是否不仅仅是启用它,而是选择扫描次数。手册没有确认这一点,但可能值得一试。
另外,我不知道扫描计数是否存在低于 3 或高于 5。在这种情况下,您会认为他们必须提及它,因此您不会选择 1 作为值……但谁知道呢。我可能会玩一点。