0

我正在尝试在 AWS Lambda 上运行 imageMagick 命令并使用 gm 模块。我不断收到此图像格式“无解码委托”的错误@error/Constructe.c/ReadImage/544。我相信这个错误表明我的语法对于命令不正确。我尝试了很多方法。我可以在我的 Linux 系统的命令行上运行这个命令。

这是命令。(改编自这里

convert test.jpg -crop 120x120+300+300 -colorspace gray -format "%[fx:100*mean]%%" info:

这是我的功能。

gm(imgobj,'test.jpg').command('convert')
    .in('-crop', '120x120+300+300','-colorspace','gray','-format','%[fx:100*mean]%%')
    .out('info:')
    .stream(function (err, stdout, stderr) {
});

gm nodejs 模块。在这儿。

解决了!

gm(imgobj,'test.jpg').command('convert')
    .in('-crop', '120x120+300+300')
    .in('-colorspace', 'gray')
    .toBuffer(function(err, buffer) {
        if(err) throw err;
        gm(buffer, 'test.jpg').identify({bufferStream: true, format:'%[fx:100*mean]'},function(err, data) {
            if(err) throw err;
            console.log('identify',data);
        });
});

文档中提到了这个“GOTCHA”:

使用输入流和任何“识别”操作(大小、格式等)时,{bufferStream: true}如果您还需要在之后转换(write() 或 stream())图像,则必须通过(注意:这会将 readStream 缓冲在内存中! )。

文档说使用:gm().identify(format, callback)这似乎对我有用,而无需设置bufferStream: true. 我想这是正确的,因为我“之后不需要流式传输图像”。但是,对于一般知识,我查看了源代码并弄清楚了如何将 params{bufferStream: true, format:'%[fx:100*mean]'}格式作为转义参数传递。

4

0 回答 0