CNode

zlib.inflate 与 zlib.deflate

问答
Ll3ve发布于9 年前最后回复9 年前4 回复6748 浏览0 收藏

最近在研究 png,其中有块数据需要用到 zlib.inflate 来解压数据块,一切都很正常,但昨天突然发现一个 buffer 进行 inflate 之后 deflate 得到的 居然不是之前的 buffer(好像丢失了数据),这是咋回事?求解答

buffer1: WechatIMG133.jpeg buffer2: WechatIMG134.jpeg

多次测试情况如下:

  1. buffer1 解压后和 buffer2 解压缩后的数据是相等的
  2. buffer1 解压后再压缩得到 buffer2
  3. buffer2 解压后再压缩得到 buffer2
  4. 压缩的options 当中 level 会改变压缩后的数据,当是怎么设置也得不到 buffer1
查看回复

回复 (4)

Z
ziliwesley#1·9 年前

inflate 和 deflate 反过来试下, deflate 在前, inflate 在后

L
l3ve#2·9 年前
引用 ziliwesleyinflate 和 deflate 反过来试下, deflate 在前, inflate 在后

@ziliwesley 我的数据源本来就是从PNG里取到的压缩数据,感觉和压缩参数有关系。

D
dislido#3·9 年前

说明原本的png文件不是用默认设置压缩的,可以用这个deflate压缩后的png与原图对比,应该是相同的

G
godghdai#4·9 年前

测试后跟压缩参数没关系,压缩参数会写到压缩后的数据的开头

const zlib = require('zlib');

const buffer = Buffer.from('node js 中华人民共和国', 'utf8');
console.log("\nsource:\n",buffer);
let encode = zlib.deflateSync(buffer);
console.log("\nencode default:\n",encode);
encode = zlib.deflateSync(buffer, {
    level: 9,
    memLevel:5
});
console.log("\nencode default 9:\n",encode);

let decode = zlib.inflateSync(encode);
console.log(decode.toString());
参与回复
登录后即可参与回复。登录