Using canvas layer in function

Before starting to use the canvas layer, it is required to have the layer deployed through AWS Serverless Application Repository or AWS Lambda console, you may refer setup information for details. Then, you may create your Lambda function using:

  • AWS Lambda console editor; or
  • Local tool in your machine; or
  • Any way you may prefer

Following is an example where a Lambda function uses the canvas layer to generate PNG graphic with colored text and circle rendered. There is no environment variable setting is required in this example.

Function structure

The setup of the function may look like the following structure. For font file, you may use any supported font file you like, in this example, we are going to use DejaVu Sans1 which could be originally found in Amazon Linux 2 EC2 instance.

/var/task/
    .
    ├── fonts/
        ├── DejaVuSans.ttf
        ├── fonts.conf
    ├── index.js

Font configuration using fonts.config

Since AWS Lambda does not appear to support even the basic fonts on its own, so we create the fonts directory at the root directory for our Lambda function with following font configuration file2.

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/var/task/fonts</dir>
    <cachedir>/tmp/fonts-cache/</cachedir>
    <config></config>
</fontconfig>

Build function code in index.js

Once the setup is ready, we may put following function code and test it in AWS Lambda console.

let { registerFont, createCanvas } = require('canvas');

exports.handler = async (event) => {
    registerFont(__dirname.concat('/fonts/DejaVuSans.ttf'), { family: 'DejaVu Sans' });

    let canvas = createCanvas(300, 300);
    var ctxCircle = canvas.getContext('2d');
    var X = canvas.width / 2;
    var Y = canvas.height / 2;
    var R = 45;
    ctxCircle.beginPath();
    ctxCircle.arc(X, Y, R, 0, 2 * Math.PI, false);
    ctxCircle.lineWidth = 3;
    ctxCircle.strokeStyle = '#FF9900';
    ctxCircle.stroke();

    var ctxText = canvas.getContext('2d');
    ctxText.font = '40px "DejaVu Sans"';
    ctxText.fillStyle = '#146EB4';
    ctxText.fillText('DejaVu Sans', 15, 120);

    const response = {
        statusCode: 200,
        body: JSON.stringify(canvas.toDataURL()),
    };

    return response;
};

Following is the sample response from the above example function code.

{
  "statusCode": 200,
  "body": "\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3dd3hc5Zn38e99RpI7LhoZTAvhNRBKKAGWloRACsUyNs0hhJqNLZpkU5bsJrtEpJEC2MgBWwYSEjYJmB7JxlSTpSRLaAmBEKqzNBfJDdvYkubc7x8ajc6ojqwyM/Lvc12+POfRc87cmnLrPOc8BUREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREREtkWW7QDyRcnMms+625Mt226cXX9D6X9nMyaBkosWjqRg2OlgR4fGZ8zZARgNJIB1hi9z7K9u/nTBlqIlK+YftzLLIUsvFPTVgXa8vCbe0GiruqnWYPCRwzrwdYYtc3gR54UCgmeXzz2xu/23afHy2qswrm7ZNvjVqqrS83p93Fk1XyC0pZGiv9dVle7T2+P2q8qFRfHVw77t2GXAKADzdrWGObYDcLi5zUgUNYbxitqn3Lh51LoRdy+77ZjNAxy19FIwwM9X5FAM7A52kMPJwPcwapss/DBeXru0ZGbNV6lc2meJdDBJBH4bELZsO5wWv/KBUb09riWC89sU/aK3x+xP2126ZFx8zfCnwb5LMlllKAA+b87tG7bb0OtELwNvoBNWV2IYX3C3O+L1G18qmVnz2WwHlGvW3DD5/wx7NFI0wj6Ond6bY44rX7ydm58aKWoMLHF7b47Zr2Y8V1iUSCzBOSRS6ji/x+3MwIOJ1rRpVN24TUNCD3Yx7ASMOcB72QpZ+k6/nck4LKuvKv1k2/Jx5Yu3o7BhdCwsLHYPD3W3ww2mAuNSlYx93W1pSUXtZauqSuf2V4x5ycJf4PaVlk03zqMXZ0SB+TRgRKRo8cobpqzoRYT9Kj70w3KwQ1MFxjoPOa1+bumjbeuubk5S7wFLmPHclfEhH07D7NtAbjd3pVN9dtG9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xX8m4Kv5fl0n+bvdCRwSKX6dgOPz/XeTzilhDXL+S8bQwK2kLw+2HvgvxnKjTSORpdC2ildSwAQuAa6mdbgNNK96869WxrrsRCYDQQlrG+HVzACqgCGR4r9gXGQzeCZLYfWIz+cQjJuAQyPFWzC+xXSq1M9q8FPC2oYkv/C/AvaJFuP8FvhRcjmxnJO8Hvcdmiffi35mX2ttpg0AAAJ5SURBVCHgXA232XYoYW1jvJpCjItwvg+Miv4IZxHO9+1Cns1WfFE+nwMwLgfOhLRJCjcBP2MsPxosNxAkM0pY2yi/kV0oYDZwagc/fgrj1xRy10D3EE9ec5tG87qBn+2gyl0EXGbTeW8g45LcoIS1jfObOZiQ/wSm0P7zsBmowbmPBEvtYpb3Sww3sgMFHItxMk4pMLRNlRC4H/ihlaVWwJZtkBKWAMnrRDG+jXMaUNhJtVcxHgOeIcE/GMHrdk5qqubMnudGRlLAnjh7YRwJHEv6NbWoRuAujB8lVwySbZwSlqTxX1BCI1+juUl2SHf1gXeBt4E6YAOwAWND88EYCal/cWB3WofOdM54Nrl8/B1a5FSilLCkU34ze5PgVIxjgSNo31TrK5txnsF4jAT32EX8o5+eR/KcEpZkxK9nGMM5EuNonP0w9gImQo/nkW8A3gReo7lbwhMU8IydnxqwLdIpJSzZal5JATuzG86uOGNTTcDm/0k2DZubiMYaQv7JWJblW+96ERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER4f8DqOCCaaubKHMAAAAASUVORK5CYII=\""
}

As a result, the generated PNG graphic with colored text and circle rendered may look like as follow.