首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在AWS中的现有图像上写入自定义文本

在AWS中的现有图像上写入自定义文本
EN

Stack Overflow用户
提问于 2019-01-17 08:00:14
回答 1查看 443关注 0票数 1

我需要能够在我拥有的图像上编写一些自定义文本,该图像存储在S3中。在AWS生态系统中实现这一目标的最佳方式是什么?如果可能,我希望避免启动服务器并在其上运行PHP或节点,我只想使用lambda函数或类似的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-17 08:22:46

在Lambda上通过node.js使用imagemagick。很多人都这样做过。这里有一个很好的例子:https://tech.mybuilder.com/memes-as-a-service-using-lambda-serverless-and-imagemagick/

lambda函数如下所示:

代码语言:javascript
复制
'use strict';

const gm = require('gm').subClass({ imageMagick: true });
const fs = require('fs');

const { IMAGES_DIR, TEXT_SIZE, TEXT_PADDING } = process.env;

const parseText = text => (text || '').toUpperCase();
const getImages = () => fs.readdirSync(IMAGES_DIR);
const parseImage = image => getImages().find(file => file.indexOf(image) === 0);
const random = arr => arr[Math.floor(Math.random() * arr.length)];
const randomImage = () => random(getImages());

module.exports.meme = (event, context, callback) => {
  const input = event.queryStringParameters || {};

  const top = parseText(input.top);
  const bottom = parseText(input.bottom);
  const image = parseImage(input.image) || randomImage();

  const meme = gm(`${IMAGES_DIR}${image}`);

  meme.size(function (err, { height }) {
    meme
      .font('./impact.ttf', TEXT_SIZE)
      .fill('white')
      .stroke('black', 2)
      .drawText(0, -(height / 2 - TEXT_PADDING), top, 'center')
      .drawText(0, height / 2 - TEXT_PADDING, bottom, 'center')
      .toBuffer(function (err, buffer) {
        callback(null, {
          statusCode: 200,
          headers: { 'Content-Type': 'image/jpeg' },
          body: buffer.toString('base64'),
          isBase64Encoded: true,
        });
      });
  });
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54227179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档