graphicsmagick and cfs: Store one cropped image to three stores - creating temp stream

Viewed 128

I'm trying to do some cropping using graphicsmagick and cfs and save the result to S3 (cfs:gridfs, cfs:graphicsmagick and cfs:s3).

The cropped image should be stored to three stores (main, public and thumbnail) - the stores itself have some transformWrite functions. So I thought I have to create a temp stream for doing this, but I failed to create this temp stream. I need some help for that.

I'm using the gridFS, no filesystem

var file     = Media.findOne({ _id: fileId }),
    read     = file.createReadStream('main');

gmread = gm(read)
    .crop(selection.w, selection.h, selection.x, selection.y)
    .stream();

gmread.on('end', Meteor.bindEnvironment(function (error, result) {
    if (error) 
        console.warn(error);

    // create a temp stream
    var tmpread = fs.createReadStream(filename); // <-- MY PROBLEM

    tmpread.on('end', Meteor.bindEnvironment(function (error, result) { 
        if (error) 
            console.warn(error);
    }));

    // set cropped image to main store
    var write = file.createWriteStream('main');
    tmpread.pipe(write);

    // set public store image
    var writePublic = file.createWriteStream('public');
    gm(tmpread).stream().pipe(writePublic);

    // set thumbnail image
    var writeThumbnail = file.createWriteStream('thumbnail');
    gm(tmpread).stream().pipe(writeThumbnail);

}));

gmread.pipe(temp);
2 Answers
Related