6

ストリームを読み取って同じファイルに書き戻す必要があるため、gminを介して画像操作を実行しようとしています。以下に示すように、一時ファイルを使用する必要があります。collectionFS

画像の幅が 1000px を超えているかどうかを確認したい。この場合、サイズを 1000px に変更する必要があります。

TypeError: Object [object Object] has no method 'pipe'残念ながら、エラーが発生したため、これは機能しません。Error: gm().stream() or gm().write() with a non-readable stream.

var fs       = Npm.require('fs'),
    file     = Images.findOne({ _id: fileId }),
    read     = file.createReadStream('public'),
    filename = '/tmp/gm_' + Date.now(),
    temp     = fs.createWriteStream(filename);

if (method == 'resize') {
    // resize to 1000px, if image is bigger
    gmread = gm(read);
    gmread.size(function(err, size){
        if(size.width > 1000) {
            gmread.resize('1000').stream();
        }
    });
}

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

    var tmpread = fs.createReadStream(filename);
        write   = file.createWriteStream('public');

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

    tmpread.pipe(write);
}));

gmread.pipe(temp);
4

2 に答える 2

0

GraphicsMagick にテストをさせることができます。試す

gmread.resize('1000x50000>');

それ以外の

gmread.size(function(err, size){
    if(size.width > 1000) {
        gmread.resize('1000').stream();
    }

GraphicsMagick の「ジオメトリ」ページを参照してください。

于 2015-11-30T03:28:54.657 に答える