node.js - 使用 node.js 和 gm 在 AWS Lambda 上为图像添加水印

标签 node.js imagemagick aws-lambda

我正在尝试在 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/

相关文章:

javascript - AWS Lambda : console. 错误未覆盖

node.js - 如何使用 API 网关集成访问 Node js AWS Lambda 中的 POST 参数?

mysql - Sequelize 与同一个表的关联

node.js - aws api gateway client 不执行。然后,它只是退出 apigClient 函数

node.js - 从node.js中的wsdl生成请求xml

php - 将 tiff(带路径)转换为 png 并删除背景(透明)- 在 PHP 中使用 Imagemagick

ruby-on-rails - Rails API 创建二维码并将图像存储在 active_storage 中

Node.js 错误 : Cannot find module 'ssl-root-cas/latest'

php - 将 pdf 的第一页转换为 jpg 时收到无效文件名错误

node.js - 如何在Lambda函数中访问API网关请求模型?