gpt4 book ai didi

java - TIFF 5.0 风格的 LZW 压缩有什么特别之处

转载 作者:行者123 更新时间:2023-11-30 06:17:01 34 4
gpt4 key购买 nike

我正在编写 TIFF 解码器。我使用的 LZW 解码器适用于所有 LZW 压缩的 GIF 和 TIFF 图像,但会溢出解码代码字符串缓冲区的图像除外。我使用 com.sun.media.imageioimpl.plugins.tiff 包中的 TIFFLZWDecompressor 对其进行了测试,它抛出以下异常“java.lang.UnsupportedOperationException:不支持 TIFF 5.0 样式的 LZW 代码”。

我一直在努力寻找5.0风格的LZW有什么特别之处,但没有成功。有人对此有任何想法吗?

注意:在 TIFFLZWDecompressor 源代码中,TIFF 5.0 样式 LZW 压缩的指示符是压缩数据的前两个字节 {0x00, 0x01}。

最佳答案

我最近在编写 TIFF LZW 编码器时遇到了同样的问题。 TIFF 检查工具在正确解码图像时提示“旧式 LZW 代码”。经过一些研究,我发现 LZW 压缩机的实现发生了变化。原始(“旧式”)格式使用与 GIF LZW 压缩器完全相同的操作模式。实际上,您可以使用工作的 GIF 压缩器并将其插入 TIFF 实现中,而不需要太多努力,并且它会生成大多数 TIFF 读者可以接受的文件。 (我发现的一个值得注意的异常(exception)是 Corel PaintShop Pro X7。)

“old-style”和“new-style”的区别在于两个编码细节:

  • LZW 代码以相反的位顺序写入流。
  • “New-style”比“old-style”提前一个符号增加代码大小(所谓的“Early Change”)。

聪明的 TIFF 解码器检查比特流的前一个或两个字节以检测“旧式”编码。这是可能的,因为发出的第一个符号始终是明文代码 0x100。如果第一个字节是 0x00,那么显然是前导 1 位之后的 8 个零位,所以它是“旧式”。 “新式”比特流从1比特开始,所以第一个字节是0x01。

关于java - TIFF 5.0 风格的 LZW 压缩有什么特别之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26366659/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com