amazon-web-services - 在 AWS Lambda 和 Node.js 12.x 中使用自定义字体

标签 amazon-web-services fonts aws-lambda sharp

我正在尝试创建一个 AWS Lambda 函数来对图像应用水印效果。原始图像将从 S3 中提取,应用水印并将结果上传回 S3。

我正在使用 sharp使用此代码创建这些组合:

await sharp(inputImage)
              .rotate()
              .composite([{ input: new Buffer.from(watermark), tile: true, gravity: 'northwest' }])

带有自定义水印的 SVG

watermark = `<svg ... <text x="50%" y="100%" style="font-family:'Open Sans';font-weight:400;font-size:75px;font-style:normal;fill:rgba(128,128,128,1);stroke:none;" text-anchor="middle">${event.watermarkName}</text></g></svg>`;

在 SVG 中有一个文本元素,我动态更改它以包含指定的字符串。例如,我可以将 (c) 公司名称 放在一张图片上,将 (c) John Doe 放在另一张图片上。

代码在我的机器上运行时有效,但是一旦进入具有 Node.js 12.x 运行时的 Lambda 函数,这就是结果 Example of text watermark

如您所见,我将 Open Sans 指定为要使用的字体。事实上,我将 OpenSans-Regular.ttf 文件放在 /fonts/ 中,创建了一个 fonts.conf 文件并设置了一个 FONTCONFIG_PATH='/var/task/fonts'this question 中所述.

尽管如此,字体仍然无法正常工作。有人对我如何解决这个问题有建议吗?

最佳答案

好吧,问 Stackoverflow 帮助我自己找到了答案,所以我分享一下,以防将来有人偶然发现这个问题。

AWS Lambda 本身似乎不支持基本字体。因此,您需要将 onw 字体作为文件包含在部署 zip 文件中。

在我的例子中,这是有效的:

  • 创建一个 /fonts 文件夹并在里面放置所有需要的文件(在我的例子中是 OpenSans-Regular.ttf)。

  • 将名为fonts.conf 的文件放入该文件夹

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
       <dir>/var/task/fonts/</dir>
       <cachedir>/tmp/fonts-cache/</cachedir>
       <config></config>
    </fontconfig>
    
  • 通过创建环境变量告诉 Lambda 配置文件在哪里

     FONTCONFIG_PATH='./fonts'
    

瞧瞧!

Working example

关于amazon-web-services - 在 AWS Lambda 和 Node.js 12.x 中使用自定义字体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63169825/

相关文章:

android - 如何在 Android 的 AChartEngine 中增加 X 或 Y 轴标签大小并启用缩放

amazon-web-services - AWS IAM - 从 Lambda 到 DynamoDB 的访问被拒绝

ssh - 如何自定义 sam 构建以传递 ssh 并访问我在 GitHub 上的私有(private)仓库?

amazon-web-services - 无法启动 Redis 内存数据存储。 Ubuntu 18.04

amazon-web-services - AWS Elasticsearch 服务 : Disable index auto creation (auto_create_index)

amazon-web-services - Cloudformation ECS集群

java - 异步 Lambda 代理集成

linux - 在 Amazon Linux 虚拟服务器上的 Python 2.7 上安装 GDAL

html - 使用自定义字体而不是 javascript 使空格/制表符/换行符可见

python - 为什么在 xvfb 下显示的文字更大?