Fra*_*sco 5 fonts amazon-web-services aws-lambda sharp
我正在尝试创建一个 AWS Lambda 函数来对图像应用水印效果。原始图像将从 S3 中提取,应用水印并将结果上传回 S3。
我使用Sharp通过以下代码创建这些组合:
await sharp(inputImage)
.rotate()
.composite([{ input: new Buffer.from(watermark), tile: true, gravity: 'northwest' }])
Run Code Online (Sandbox Code Playgroud)
带有自定义水印 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>`;
Run Code Online (Sandbox Code Playgroud)
SVG 内部有一个文本元素,我可以动态更改该元素以包含指定的字符串。例如,我可以放置(c) Company Name一张图像和(c) John Doe另一张图像。
该代码在我的机器上运行时有效,但一旦进入具有 Node.js 12.x 运行时的 Lambda 函数,这就是结果

正如你所看到的,我指定了Open Sans要使用的字体。事实上,我将OpenSans-Regular.ttf文件放入/fonts/,创建了一个fonts.conf文件并按照这个问题FONTCONFIG_PATH='/var/task/fonts'中的描述设置了 a 。
尽管如此,字体仍然无法工作。有人对我如何解决这个问题有建议吗?
Fra*_*sco 10
很好地询问 Stackoverflow 帮助我自己找到了答案,所以我分享以防将来有人偶然发现这个问题。
\nAWS Lambda 本身似乎甚至不支持基本字体。因此,您需要将您的字体作为文件包含在部署 zip 文件中。
\n就我而言,这有效:
\n创建一个/fonts文件夹并在里面放置所需的所有文件(在我的例子中OpenSans-Regular.ttf)。
fonts.conf在此文件夹中放置一个名为的文件
<?xml version="1.0"?>\n<!DOCTYPE fontconfig SYSTEM "fonts.dtd">\n<fontconfig>\n <dir>/var/task/fonts/</dir>\n <cachedir>/tmp/fonts-cache/</cachedir>\n <config></config>\n</fontconfig>\nRun Code Online (Sandbox Code Playgroud)\n通过创建环境变量告诉 Lambda 配置文件在哪里
\n FONTCONFIG_PATH=\'./fonts\'\nRun Code Online (Sandbox Code Playgroud)\n瞧\xc3\xa0!
\n\n| 归档时间: |
|
| 查看次数: |
3634 次 |
| 最近记录: |