-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Description
Hi,
I'm trying to use sharp's streaming capability in tandem with archiver to resize and zip multiple images and stream out to a consumer. I can get each library to work on their own, but not together on any more than a single image.
Here's some example code:
const fs = require('fs');
const archiver = require('archiver');
const sharp = require('sharp');
//const imagemagick = require('imagemagick-stream');
const request = require('request');
function resizeAndZip() {
const imageStreams = [
request('http://i.stack.imgur.com/tKsDb.png'),
request('http://i.stack.imgur.com/EdUwb.png'),
request('http://i.stack.imgur.com/5d55j.png')
];
const zip = archiver('zip');
zip.on('entry', (entry) => console.log(`${entry.name} successfully appended to zip`));
imageStreams.map((stream) => {
const resize = sharp().resize(100, 100);
// const resize = imagemagick().resize('100x100');
return stream.pipe(resize);
})
.forEach((resizedImageStream, i) => {
zip.append(resizedImageStream, { name: `${i}.png` });
});
zip.finalize();
return zip;
}
resizeAndZip().pipe(fs.createWriteStream(__dirname + '/output.zip'));In the example you can see that I've also imported imagemagick-stream. If this library is used as the resizer instead of sharp everything works fine. I'm not sure whether this is a compatibility problem or if I'm using sharp incorrectly.