Node.js 将完整Imagemagick上传至AWS Lambda,并与graphics magic模块一起使用

Node.js 将完整Imagemagick上传至AWS Lambda,并与graphics magic模块一起使用,node.js,amazon-web-services,lambda,imagemagick,gm,Node.js,Amazon Web Services,Lambda,Imagemagick,Gm,下面是一个示例,讨论了出于安全原因如何在AWS Lambda上限制预加载的Imagemagick “注意:此更新包含更新的/etc/ImageMagick/policy.xml 禁用临时、HTTPS、HTTP、URL、FTP、MVG、MSL、, “文本、标签和编码” 我需要使用“标签”功能(在我的开发机器上成功运行-下面的示例pic)) 在链接帖子的讨论中,frenchie4111慷慨地提供了他创建的节点模块的使用,该模块将imagemagick上传到lambda应用程序:github链接 我想

下面是一个示例,讨论了出于安全原因如何在AWS Lambda上限制预加载的Imagemagick

“注意:此更新包含更新的/etc/ImageMagick/policy.xml 禁用临时、HTTPS、HTTP、URL、FTP、MVG、MSL、, “文本、标签和编码”

我需要使用“标签”功能(在我的开发机器上成功运行-下面的示例pic))

在链接帖子的讨论中,frenchie4111慷慨地提供了他创建的节点模块的使用,该模块将imagemagick上传到lambda应用程序:github链接

我想了解上传Imagemagick的新版本是如何工作的,以及我将如何将该版本与合并IM和NodeJ的GM模块一起使用

如果我阅读正确,每次启动lambda应用程序时,imagemagick的完整版本都会重新加载到下面的地址

 /tmp/imagemagick  
DoubleDor的自述说明提供了以下选项:

var imagemagick_prebuilt = require( 'imagemagick-prebuilt' );

var child_process = require( 'child_process' );

exports.handler = function( event, context ) {
    return q
        .async( function *() {
            imagemagick_bin_location = yield imagemagick_prebuilt();
            console.log( `ImageMagick installed:   ${imagemagick_bin_location}` );

            // ImageMagick logo creation test:
            // convert logo: logo.gif
            var convert_process = child_process
                .spawn( imagemagick_bin_location, [ 'logo:', 'logo.gif' ] )

            convert_process
                .on( 'close', function() {
                    context.success();
                } );
        } )();
};
要在下面的部分文件中(在我的nodejs lambda应用程序中)工作,我将包括/需要什么来定义“gm”

我是否也需要编辑GM模块

//imagemaker.js > gets included and called from another file that uploads picture to s3, and/or tweets it after picture is created in /tmp/filename.jpg   This works presently.. I can make and upload imagemagick text generated images but I just can't use the 'label' tool which scales text within appended gm images 

'use strict';

var Promise = require('bluebird');
var exec = require('child_process').exec;
var async = require('async');
var request = require('request');
var fs = require('fs');
var dateFormat = require('dateformat');
var gm = require('gm').subClass({imageMagick: true});
var aws = require('aws-sdk');

performers = [ { name: 'Matt Daemon', score: 99}, { name: “Jenifer Lawrence”, score: 101}
//created in a makeTitle function I omit for brevity sake.
url = “/temp/pathtotitlepicture.jpg” 

// function below successfully appends a gm title image created with other functions that I haven't included
 function makeBody(url){
    var img = gm(400,40)
        .append(url)
        .gravity('West')
        .fill('black')
        .quality('100')
        .font('bigcaslon.ttf')
        .background('#f0f8ff')
    for (var i = 0; i < performers.length; i++) {
      var pname = " " + (i+1) + ") " +performers[i].name;
      img.out('label:'+pname);
    };  
    img.borderColor('#c5e4ff')
         .border('5', '5')
         .write(url, function (err) {
           if (err) throw err;
             var stream = fs.createReadStream("/tmp/fooberry.jpg")
             return resolve(stream)
          });
  }
//imagemaker.js>包含在另一个文件中并从该文件调用,该文件将图片上传到s3,并且/或者在/tmp/filename.jpg中创建图片后将其发送到tweet。目前,此功能正常。。我可以制作和上传imagemagick文本生成的图像,但我不能使用“标签”工具来缩放附加gm图像中的文本
"严格使用",;
风险值承诺=要求(“蓝鸟”);
var exec=require('child_process')。exec;
var async=require('async');
var请求=要求(“请求”);
var fs=需要('fs');
var dateFormat=require('dateFormat');
var gm=require('gm')。子类({imageMagick:true});
var aws=要求('aws-sdk');
表演者=[{name:'Matt Daemon',得分:99},{name:'Jenifer Lawrence',得分:101}
//在makeTitle函数中创建,为了简洁起见,我省略了它。
url=“/temp/pathtotitlepicture.jpg”
//下面的函数成功地附加了一个gm标题图像,该图像是用我没有包含的其他函数创建的
函数makeBody(url){
var img=gm(400,40)
.append(url)
.重力(“西”)
.填充(“黑色”)
.质量('100')
.font('bigcaslon.ttf')
.背景(“#f0f8ff”)
对于(var i=0;i
为了好玩,下面的图片展示了我在我的开发机器上使用gm(graphics magic)和imagemagick所做的工作,我现在想开始使用AWS Lambda>>我真的需要这个“标签”功能,我想这意味着学习如何在每次启动时将整个库上传到AWS Lambda!(?)


你有没有发现这个问题?@NudeCanatroll没有,对不起。我想理解它,但接着讲了其他事情。我仍然希望以无服务器的方式实现它。我在这里发布了一个有效的答案。