我正在尝试反转图像的像素。我有一个简单的转换流,可将缓冲区从读取流写入写入。当前,转换实现如下所示:
Inversion.prototype._transform = function(chunk, enc, cb) {
const clampedArray = Uint8ClampedArray.from(chunk).map(invert);
var buf = Buffer.from(clampedArray)
this.push(map);
cb();
}
function invert(pixel) {
return 255 - pixel;
}
我可以看到缓冲区内容似乎正在按照我的期望进行转换:
> <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff e2 02 1c 49 43 43 5f 50 52 4f 46 49 4c 45 00 01 01 00 00 02 0c 6c 63 6d 73 02 10 00 00 ... >
> <Buffer 00 27 00 1f ff ef b5 b9 b6 b9 ff fe fe ff ff fe ff fe ff ff 00 1d fd e3 b6 bc bc a0 af ad b0 b9 b6 b3 ba ff fe fe ff ff fd f3 93 9c 92 8c fd ef ff ff ... >
但是,我无法再打开图像An error occurred while loading the image
。我以为原始缓冲区可能还有我不知道的与png相关的其他数据,所以我只是将图像数据重新写到位:
for(let [key, val] of clampedArray.entries()) {
chunk[key] = val;
}
,但这似乎仍会导致图像错误。正确渲染新jpeg的唯一方法是按下chunk
不变。