【问题标题】:Utilizing custom font in AWS Lambda and Node.js 12.x在 AWS Lambda 和 Node.js 12.x 中使用自定义字体
【发布时间】:2020-11-20 00:01:55
【问题描述】:

我正在尝试创建一个 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) Company Name 放在一张图片上,将(c) John Doe 放在另一张图片上。

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

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

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

【问题讨论】:

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


    【解决方案1】:

    也为我工作过 FONTCONFIG_FILE="/var/task/fonts.conf"

    【讨论】:

    【解决方案2】:

    问 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'
      

    瞧!

    【讨论】:

    • FONTCONFIG_PATH 对我不起作用。只有FONTCONFIG_FILE="/var/task/fonts.conf" 为我工作。
    猜你喜欢
    • 1970-01-01
    • 2018-03-11
    • 2021-07-24
    • 1970-01-01
    • 2021-09-24
    • 2021-01-17
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多