我正在尝试在 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]'}
格式作为转义参数传递。