我从PDF中提取原始数据,然后对原始数据进行解压缩并再次压缩。
我期望相同的标题和预告片,但标题被改变了。
48 89 EC 57 ....78 9C EC BD ...我深入研究了zlib压缩,得到了头48,它也是zlib.header的一部分。
但大多数情况下,78用于zlib压缩。
是我的代码解压缩:
decompress_wbit = 12
compress_variable = 6
output_data = zlib.decompress(open(raw_data, "rb").read(), decompress_wbit)
output_data = zlib.compress(output_data, 6)
output_file = open(raw_data + '_', "wb")
output_file.write(output_data)
output_file.close()我改变了decompress_wbit和compress_variable,但仍然保留着78。
所以不知道如何将48作为头文件。
下面是关于zlib.header的简短描述。
指示窗口大小为2的幂,从0(256个字节)到7 (32768字节)。这通常是7,不允许更高的值。
压缩法。只允许倾斜(8)。
大致表示压缩级别,从0(快/低)到3(慢/高)
指示是否使用预置字典。这通常是0。1在技术上是允许的,但我不知道任何定义预设字典的Deflate格式。
校验和(5位,0.. 31 ),其值的计算使得整个值除以31而没有余数。
通常,只能自由更改CINFO和FLEVEL字段,并且必须根据最终值计算FCHECK。*假定没有预置字典,在其他字段中没有选择,因此总共有32个可能的标头是有效的。下面是它们:
FLEVEL: 0 1 2 3
CINFO:
0 08 1D 08 5B 08 99 08 D7
1 18 19 18 57 18 95 18 D3
2 28 15 28 53 28 91 28 CF
3 38 11 38 4F 38 8D 38 CB
4 48 0D 48 4B 48 89 48 C7
5 58 09 58 47 58 85 58 C3
6 68 05 68 43 68 81 68 DE
7 78 01 78 5E 78 9C 78 DA请告诉我如何在解压缩和压缩的同时保持zlib.header
耽误您时间,实在对不起。
发布于 2020-09-08 14:00:54
我首先要指出,这并不重要。使用那个zlib头可以很好地解压缩数据。你为什么这么在意?
您为zlib.compress提供了少量的数据,允许使用更小的窗口。由于它是允许的,Python库选择使用一个较小的窗口进行压缩。
避免这种情况的一种方法是使用zlib.compressobj。启动时,它不知道您将输入多少数据,并默认为最大的窗口大小。
https://stackoverflow.com/questions/63793703
复制相似问题