I'm trying to create an AWS Lambda function to apply a watermarking effect on images. The original image will be pulled from S3, the watermarks applied and the results uploaded back to S3.
I'm using sharp to create these compositions with this code:
await sharp(inputImage)
.rotate()
.composite([{ input: new Buffer.from(watermark), tile: true, gravity: 'northwest' }])
With a custom watermark 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>`;
Inside the SVG there is a text element that I dynamically change to contain a specified string. For example, I can put (c) Company Name
on one image and (c) John Doe
on another.
The code works when is running on my machine, but once inside a Lambda function with Node.js 12.x runtime this is the result
As you can see I specified Open Sans
as the font to be used. I, in fact, put the OpenSans-Regular.ttf
file in /fonts/
, created a fonts.conf
file and set a FONTCONFIG_PATH='/var/task/fonts'
as described in this question.
Nonetheless, fonts are still not working. Does anyone have suggestions about how I can fix this?
FONTCONFIG_PATH
did not work for me. onlyFONTCONFIG_FILE="/var/task/fonts.conf"
worked for me. – Gabe