我正在尝试在AWS Lambda上运行imageMagick命令并使用gm模块。我一直收到一个错误,没有解码代表这个图像格式`' @ error / construct.c / ReadImage / 544。我相信这个错误表明我的语法对于命令不正确。我尝试了很多方法。我可以在我的Linux系统上的命令行上运行此命令。
这是命令。 (adapted from here)
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 module.就在这里。
解决!
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
有用。我认为这是正确的,因为我不需要随后流式传输图像。"但是,对于一般知识,我查看了源代码并找出了如何将{bufferStream: true, format:'%[fx:100*mean]'}
格式escape argument传递给attribute value selector。