有人知道PackBits压缩(标签259;值32773)和水平差分预测器(标签317;值2)的组合是否a)根据TIFF规范允许?并且,b )通常在软件中支持?
到目前为止,我发现TIFF 6.0规范中有关于Predictor的内容如下:
目前,此字段仅用于LZW(压缩= 5)编码,因为LZW可能是唯一一个从预测器步骤中获益的TIFF编码方案。
根据this page(这似乎是网络上最好的TIFF资源之一):
理论上,预测器步骤独立于压缩步骤,因此可以与任何压缩方案组合。然而,当与LZW或Deflate压缩相结合时,它可能是最有用的。
我正在为Java ImageIO开发一个TIFF图像编写器插件,一些快速测试表明PackBits压缩也受益于预测器步骤。我的插件可以毫无问题地读取/写入组合,但我问的原因似乎是预览(可能是OS X'ImageIO框架)不支持此选项(显示图像,但未应用预测器步骤)。不确定LibTiff等做了什么。
PS:ZLib / Deflate和Predictor的组合似乎在我测试的所有软件中都能正常工作,所以至少它与LZW没有严格的关联。
答案 0 :(得分:1)
让我提供这方面的智慧,经过近十年的代码处理勉强或完全不合规格的TIFF和PDF:如果你甚至怀疑你正走在一条大道上这将产生破坏解码器的文件,不要去那里。只是不要。当然,如果可以,让你的解码器处理它,但除了最消毒的输出之外,不要写任何东西,这通常意味着保持简单(r)。 如果你会忽略这个建议,请务必填写software string,这样我就可以更准确地对你的父母进行诽谤。
关于PackBits - 如你所知,PackBits是一种无损RLE压缩方案,实际上并不是很好。从历史的角度来看,我认为它被添加到TIFF规范中,其唯一目的是允许Mac软件使用相对较少的代码生成TIFF,尤其是因为MacPaint格式基于PackBits。由于PackBits开始时并不是特别好用,并且没有特别广泛使用,我不会尝试将它装扮得超出它已经存在的范围:一个不是特别好的压缩方案意味着大多数白色的1位数据被认为是“遗产” “充其量。