我正在尝试在 AWS Lambda 函数中调整图像(从 S3 下载)的大小并为其添加水印。
基于 AWS Lambda“入门”项目的示例代码,调整大小部分运行良好。
现在,我在向文件添加水印时遇到问题。
在我的本地系统上,我可以这样做:
gm('martinrose.jpg')
.draw(['image Over 0,0 0,0 wm-bas.png'])
.write('brol.jpg', function(e){
console.log(e||'done');
});
而且它工作没有问题。
在Lambda环境中,我将wm-bas.png文件添加到上传到亚马逊的zip文件中,它似乎被我的js代码找到(我使用lstatSync测试),但真正的水印不起作用。
这是我所做的相关部分:
gm(response.Body).size(function(err, size) {
var scalingFactor = Math.min(
newSize / size.width,
newSize / size.height
);
var width = scalingFactor * size.width;
var height = scalingFactor * size.height;
var fs = require('fs');
var stats = fs.lstatSync('wm-bas.png');
console.log(stats); // this outputs meaningful info, so, the file exists
var ctx = this.resize(width, height);//this works
if (shouldWatermark)
{
console.log("trying to watermark");
ctx = ctx.draw(['image Over 0,0 0,0 wm-bas.png']) //this doesn't work, although the previous log is written
}
ctx.toBuffer(imageType, function(err, buffer)
{
if (err) {
next(err);
} else {
next(null, response.ContentType, buffer);
}
}
);
});
我错过了什么?为什么这不起作用?这与我保存在缓冲区而不是文件中有关吗?
我使用此代码导入 gm,顺便说一句:
var gm = require('gm')
.subClass({ imageMagick: true });
最佳答案
您需要打包所有 node_modules
与您的Lambda
部署。在项目中本地安装模块,并将它们与您的 Lambda
一起打包。代码。另一个非常重要的事实是Amazon Lambda
仍然依赖于已安装的系统库。您的Node.js module
可能使用的库可能未安装在 Lambda
的系统上执行后,您需要将所有内容与您的 Lambda
一起打包部署。
请参阅有关模块和的官方帖子 Node.js packages in Lambda
关于node.js - 使用 node.js 和 gm 在 AWS Lambda 上为图像添加水印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31643300/