2

这是之前的一篇文章,讨论了如何在 AWS Lambda 上出于安全原因限制预加载的 Imagemagick。

“注意:此更新包含一个更新的 /etc/ImageMagick/policy.xml 文件,该文件禁用了 EPHEMERAL、HTTPS、HTTP、URL、FTP、MVG、MSL、TEXT 和 LABEL 编码器”

我需要使用“标签”功能(它可以在我的开发机器上成功运行——下面的示例图片))

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

我想了解上传新版本的 Imagemagick 是如何工作的,以及我将如何将该版本与将 IM 和 nodejs 结合在一起的 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();
                } );
        } )();
};

我将包含/需要什么来定义“gm”以在下面的部分文件中工作(在我的 nodejs lambda 应用程序中)?

我是否也需要编辑 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)
          });
  }

只是为了好玩,下图显示了我在我现在想在 AWS Lambda 上工作的开发机器上使用 gm(graphics magic) 和 imagemagick 所做的事情 >> 我真的需要那个“标签”功能我想这意味着学习如何在每次启动时将整个库上传到 AWS Lambda!(?)

在此处输入图像描述

4

0 回答 0