zlib.inflate 与 zlib.deflate
发布于 7 年前 作者 l3ve 5751 次浏览 来自 问答

最近在研究 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 回复

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

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

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

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

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());
回到顶部