По своей природе потоки скважин не имеют информации о длине (поток может быть бесконечным, например, открытие /dev/random
), поэтому самый простой вариант, который я вижу, это использование другого временного буфера.К сожалению, pngquant
не имеет опций для работы с буферами, но вы ничего не можете с этим поделать, кроме использования совершенно другого пакета.
2-е редактирование, поскольку stream-буфер может не работать:
Существует пакет с именем stream-to-array
, который позволяет легко реализовать преобразование потока в буфер.Согласно README , код должен быть изменен на:
const toArray = require('stream-to-array');
const util = require('util');
toArray(bufferStream.pipe(myPngQuanter))
.then(function (parts) {
const buffers = parts
.map(part => util.isBuffer(part) ? part : Buffer.from(part));
const compressedBuffer = Buffer.concat(buffers);
console.log(compressedBuffer.length); // here is the size of the compressed data
res.write(compressedBuffer);
});
Или, альтернативно, на await
, если вы оказались в контексте async
:
const toArray = require('stream-to-array');
const util = require('util');
const parts = await toArray(bufferStream.pipe(myPngQuanter));
const buffers = parts.map(part => util.isBuffer(part) ? part : Buffer.from(part));
const compressedBuffer = Buffer.concat(buffers);
console.log(compressedBuffer.length); // here is the size of the compressed data
res.write(compressedBuffer);