Получить «острые» метаданные после прохождения через другой модуль - PullRequest
0 голосов
/ 27 июня 2018

Я хочу сжать изображение, используя Sharp библиотеку обработки изображений, передать его через внешнюю библиотеку quant и затем получить точные метаданные для него. Я хочу сделать это для фактического наложения размера сжатого изображения на изображение (только во время разработки).

Для WEBP это легко, потому что все находится на острие.

 // specify the compression
 myImage.webp({ quality: 80 });

 // actually compress it
 var tempBuffer = await myImage.toBuffer({ resolveWithObject: true});

 // create a new sharp object to read the metadata
 var compressedImage = sharp(tempBuffer.data);

 // Image data is now available in 
 console.log(compressedImage.info.size / 1024);

Но когда я использую библиотеку quant, я передаю ее в стороннюю библиотеку, и она больше не является острым предметом. Мне нужно снова извлечь необработанный буфер наиболее эффективным способом. Я новичок в Node.js и не знаю, как это сделать.

 resizedImage.png()
             .pipe(new quant(['--quality=50-70', '--speed', '1', '-']));

Нужно ли использовать что-то вроде https://www.npmjs.com/package/stream-to-array?

Это кажется мне безумным! Я что-то упустил?

1 Ответ

0 голосов
/ 27 июня 2018

Разобрался. Вы можете просто отправить его обратно в sharp() так:

resizedImage.png()
            .pipe(new quant(['--quality=50-70', '--speed', '1', '-']))
            .pipe(sharp());

Затем вы можете позвонить metadata() или изменить его размер и т. Д. (Не то, что вы обычно делаете это!)

...