amazon-web-services - 在 AWS Lambda 和 Node.js 12.x 中使用自定义字体
问题描述
我正在尝试创建一个 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
文件并按照此问题FONTCONFIG_PATH='/var/task/fonts'
中的描述设置了一个。
尽管如此,字体仍然无法正常工作。有人对我如何解决这个问题有建议吗?
解决方案
好吧,询问 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'
瞧!
推荐阅读
- java - java中的ExecuteUpdate成功将记录添加到PostgreSQL但表不会更新
- javascript - 可以使用 onAuthStateChanged 中的 user_id 从 firebase 读取数据
- ios - 过滤背景噪声频率
- ios - 如何从核心数据/表格视图中添加/删除项目
- android - 我的应用与任何受支持的设备都不兼容
- lambda - 收集后在 java8 上获取索引
- c++ - C++Builder 使用 TCP 发送数组
- python - 如何在 Pandas 的 pivot_table 函数中给出条件语句?
- activerecord - 使用选择组合 ActiveRecord 范围
- swift - 使用 SearchBar 时,复选标记与 TableView 中的错误行相关联