这是之前的一篇文章,讨论了如何在 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!(?)