Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript gm:如果图像宽度大于1000px,请调整图像大小_Javascript_Meteor_Graphicsmagick_Collectionfs - Fatal编程技术网

Javascript gm:如果图像宽度大于1000px,请调整图像大小

Javascript gm:如果图像宽度大于1000px,请调整图像大小,javascript,meteor,graphicsmagick,collectionfs,Javascript,Meteor,Graphicsmagick,Collectionfs,我试图通过collectionFS中的gm进行一些图像处理,因为我需要读取一个流并将其写回同一个文件,我必须使用一个临时文件,如下所示 我想检查图像是否比1000px宽。在这种情况下,应将其重新调整为1000px 不幸的是,这不起作用,因为我得到了错误TypeError:Object[Object Object]没有方法“pipe”和Error:gm().stream()或gm().write()带有不可读的流。 var fs = Npm.require('fs'), fil

我试图通过
collectionFS
中的
gm
进行一些图像处理,因为我需要读取一个流并将其写回同一个文件,我必须使用一个临时文件,如下所示

我想检查图像是否比1000px宽。在这种情况下,应将其重新调整为1000px

不幸的是,这不起作用,因为我得到了错误
TypeError:Object[Object Object]没有方法“pipe”
Error:gm().stream()或gm().write()带有不可读的流。

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);

你可以让GraphicsMagck做测试。试一试

gmread.resize('1000x50000>');
而不是

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

请参阅GraphicsMagick页面。

我认为collectionFS的正确方式如下:

var gmread = gm(readStream, fileObj.name());
gmread.size({bufferStream: true}, FS.Utility.safeCallback(function (error, size) {
    if (error) console.warn(error);
    else {
        if(size.width > 1000) gmread.resize('1000').stream().pipe(writeStream);
    }
}));

Mybe您想将其放入商店的
transformWrite
-函数中…

您是否使用cfs:graphicsmagick?gm.isAvailable()是否返回true?如果没有,那么系统上就没有二进制文件可以让gm真正工作。是的,gm工作得很好,因为我可以做一个简单的裁剪或类似的事情。但我对gm不是很熟悉,所以我不知道如何调整大小,因为这会导致嵌套函数。。。如果我只是
resize('1000')